C++:将栈类和队列类都实现成模板类

1.栈的源代码:

#include 
using namespace std;

template
class Stack
{
private:
    T* arr;
    int top;
    int max;

public:
    // 无参构造
    Stack() : arr(nullptr), top(-1), max(0) {}

    // 有参构造
    Stack(int size)
    {
        if (size > 0)
        {
            max = size;
            arr = new T[max];
            top = -1;
            cout << "栈容量设置成功" << endl;
        }
        else
        {
            cout << "输入有误,栈的容量必须大于0" << endl;
        }
    }

    // 拷贝构造
    Stack(const Stack& other) : top(other.max), max(other.max)
    {
        if (this != &other)
        {
            arr = new T[max];
            for (int i = 0; i < top + 1; i++)
            {
                arr[i] = other.arr[i];
            }
        }
    }

    // 析构函数
    ~Stack()
    {
        delete[] arr;
    }

    // 入栈
    void push(T value)
    {
        if (!isFull())
        {
            arr[++top] = value;
            cout << value << " 入栈成功" << endl;
        }
        else
        {
            cout << "栈满,无法入栈" << endl;
        }
    }

    // 出栈
    T pop()
    {
        if (!isEmpty())
        {
            return arr[top--];
        }
        else
        {
            cout << "栈空,无法出栈" << endl;
            return T(); // 返回默认值
        }
    }

    // 清空栈
    void clear()
    {
        top = -1;
    }

    // 判空
    bool isEmpty()
    {
        return top == -1;
    }

    // 判满
    bool isFull()
    {
        return top == max - 1;
    }

    // 获取栈顶元素
    T getTop()
    {
        if (!isEmpty())
        {
            return arr[top];
        }
        else
        {
            cout << "栈空,无法获取栈顶元素" << endl;
            return T();
        }
    }

    // 求栈的大小
    int getSize()
    {
        return top + 1;
    }
};

int main()
{
    Stack stringStack(10);

    stringStack.push("hello");
    stringStack.push("world");
    cout << "栈的大小为: " << stringStack.getSize() << endl;
    cout << "栈顶元素为: " << stringStack.getTop() << endl;
    cout << stringStack.pop() << " 出栈成功" << endl;
    cout << "出栈一次后栈的大小为: " << stringStack.getSize() << endl;

    return 0;
}

2.队列源代码

#include 
#define MAX 5

using namespace std;

template 
class Queue{
public:
    //构造
    Queue();
    //析构
    ~Queue();
    //拷贝构造
    Queue(const Queue &other);
    //入队
    int push(T e);
    //出队
    int pop();
    //清空队
    void clear();
    //判空
    bool empty();
    //判满
    bool full();
    //求大小
    int size();

private:
    int front;
    int tail;
    T *data;
};

//构造函数
template 
Queue::Queue():front(0),tail(0),data(new T[MAX])
{
    cout<<"构造函数"<
Queue::~Queue(){
    delete []data;
    cout<<"析构"<
Queue::Queue(const Queue &other):front(other.front),
    tail(other.tail),
    data(new T[MAX]){
    std::copy(other.data,other.data+MAX,data);
    cout<<"拷贝构造"<
int Queue::push(T e){
    if(Queue::full()){
        cout<<"队满;"<
int Queue::pop(){
    if(Queue::empty()){
        cout<<"队空"<
void Queue::clear(){
    cout<<"清空队"<::empty()){
        Queue::pop();
    }
}
//判空
template 
bool Queue::empty(){
    return front==tail;
}
//判满
template 
bool Queue::full(){
    return (tail+1)%MAX==front;
}
//求队列大小
template 
int Queue::size(){
    cout< que;
    que.push(1);
    que.push(2);
    que.push(3);
    cout< q2=que;
    cout< q3=q2;
    cout<

3.思维导图

你可能感兴趣的:(c++,算法,开发语言)