C++作业模板实现栈和队列

#include <iostream>

using namespace std;
template <typename T>
class my_vector
{
private:
    int maxsize;
    int top;
    T data;
    T * vec;
public:
    my_vector(){maxsize=5;top=-1;vec=nullptr;}
    my_vector(int m):maxsize(m),top(-1),vec(new T[m]){}
    ~my_vector(){delete [] vec;vec=nullptr;}
    //入栈
    void puch(T e)
    {
        if(top==maxsize-1)
        {
           cout<<"栈满、插入失败\n"<<endl;
            return;
        }
        //2,入栈:先加后压
        vec[++top]=e;
        return ;
    }
    //删除
    void pop()
    {
        //1,判断栈是否为空
        if(top==-1)
        {
            cout<<"栈空,删除失败\n"<<endl;
            return;
        }
        //2,删除:先弹后减
        cout<<" "<<vec[top--]<<endl;
        return ;
    }
    //遍历:类内声名
    void output();
    //    {
    //        printf("从栈底到栈顶:\n");
    //        for(int i=0;i<=top;i++)
    //        {
    //            printf("%d\t",vec->data[i]);
    //        }
    //    }



};
template <typename T>
void my_vector<T>::output()
{
    cout<<"从栈底到栈顶:\n"<<endl;
    for(int i=0;i<=top;i++)
    {
        cout<<"  "<<vec[i];
    }
}


int main()
{
    my_vector<int> v1(10);
    for(int i=0; i<10;i++)
    {
        v1.puch(i);
    }
    v1.output();
    return 0;
}

队列

#include <iostream>

using namespace std;
template<typename T>
class MyQueue
{
private:
    T* queue;
    size_t maxSize;
    size_t front;
    size_t rear;
public:
    MyQueue(size_t s):queue(new T[s]),maxSize(s),front(0),rear(0){}
    virtual ~MyQueue()
    {
        delete [] queue;
    }
    //判空
    bool Empty()const
    {
        return front==rear;
    }
    //判满
    bool Full()const
    {
        return (rear+1)%maxSize==front;
    }
    //头删
    void dequeue()
    {

        front=(front+1)%maxSize;
    }
    //尾插
    void enqueue(const T& val)
    {

        queue[rear]=val;
        rear=(rear+1)%maxSize;
    }
    //元素个数
    int size() const
    {
        return (rear+maxSize-front)%maxSize;
    }
    void show()const
    {
        for(int i=0;i<size();i++)
        {
            cout<<queue[i]<<" ";
        }
        cout<<endl;
    }
};

int main()
{

        MyQueue<double> q(10);
        cout << "---------------------------" << endl;
        cout << "-------1.顺序队列入队-------" << endl;
        cout << "-------2.顺序队列删除-------" << endl;
        cout << "-------3.顺序队列遍历-------" << endl;
        cout << "-------0.退出程序-----------" << endl;
        cout << "---------------------------" << endl;
        while(1)
        {
            int c;
            cout << "请输入您的选择>>> ";
            cin >> c;
            switch(c)
            {
                case 1:{
                    double data;
                    cout << "   请输入入队的值>>> ";
                    cin >> data;
                    q.enqueue(data);
                }break;
                case 2:{
                    q.dequeue();
                }break;
                case 3:{
                    q.show();
                }break;
                case 0:return 0;
                default:{
                    cout << "输入错误,请重新输入" << endl;
                }break;
            }
        }
        return 0;

}

猜你喜欢

转载自blog.csdn.net/m0_53451387/article/details/130351979