1> 将之前定义的栈类和队列类都实现成模板类
栈的模块类
- #include <iostream>
- using namespace std;
-
- template <typename T>
- class Stack
- {
- private:
-
- T data[40]={0};
- T top=-1;
- public:
- Stack ()
- {
- cout<<"这是构造函数"<<endl;
- }
-
-
- int stack_empty();
-
- int stack_full();
-
- int stack_push(int e);
-
- int stack_pop();
- int stack_size();
-
- int stack_top();
- int stack_fullpop();
-
- ~Stack ()
- {
- cout<<"这是析构函数"<<endl;
- }
-
-
- };
-
- template <typename T>
- int Stack<T>::stack_empty()
- {
- if(top==-1)
- {
- cout<<"栈为空"<<endl;
- }
- return 1;
- }
-
- template <typename T>
- int Stack<T>::stack_full()
- {
- if(top==39)
- {
- cout<<"栈为满"<<endl;
- }
- return 1;
- }
- template <typename T>
- int Stack<T>::stack_push(int e)
- {
- stack_full();
- cout<<"进行入栈"<<endl;
- top++;
- data[top]=e;
- cout<<"入栈成功"<<endl;
- return 1;
- }
- template <typename T>
- int Stack<T>::stack_pop()
- {
- stack_empty();
- cout<<"进行出栈"<<endl;
- int e =data[top];
- top--;
- cout<<e<<"出栈成功"<<endl;
- return 1;
- }
- template <typename T>
- int Stack<T>::stack_top()
- {
- cout<<"栈顶元素为"<<data[top]<<endl;
- return 1;
- }
- template <typename T>
- int Stack<T>::stack_size()
- {
- return top+1;
- }
- template <typename T>
- int Stack<T>::stack_fullpop()
- {
- for(int i=top;i>-1;i--)
- {
- cout<<data[i]<<"出栈成功"<<endl;
- }
- cout<<"清空栈成功"<<endl;
- return 1;
-
- }
-
- int main()
- {
- Stack<int> s1;
- s1.stack_push(2);
- s1.stack_push(5);
- s1.stack_push(6);
- s1.stack_push(3);
- s1.stack_pop();
- cout<<"栈的大小"<<s1.stack_size()<<endl;
- s1.stack_top();
- s1.stack_fullpop();
-
- return 0;
- }

队列的模块类
- #include <iostream>
- #define MAX 40
-
- using namespace std;
- template <typename T>
- class Queue
- {
- private:
- T data[MAX]={0};
- int front=0;
- int tail=0;
- public:
- Queue()
- {
- cout<<"这里是构造函数"<<endl;
- }
-
- int queue_empty(); //判空
-
- int queue_full(); //判满
-
- int queue_push(int e); //入队
-
- int queue_pop(); //出队
-
- int queue_size(); // 队列长度
-
- int queue_fullpop(); //清空队列,全部出队
-
- ~Queue()
- {
- cout<<"这是析构函数"<<endl;
- }
-
- };
- template <typename T>
- int Queue<T>::queue_empty() //判空
- {
-
- return front==tail;
-
- }
- template <typename T>
- int Queue<T>::queue_full() //判满
- {
-
- return (tail+1)%MAX ==front;
-
- }
- template <typename T>
- int Queue<T>::queue_push(int e) //入队
- {
- queue_full();
- cout<<"进行入队"<<endl;
- data[tail]=e;
- tail++;
- cout<<"入队成功"<<endl;
- return 1;
-
- }
- template <typename T>
- int Queue<T>::queue_pop() //出队
- {
- queue_empty() ;
- cout<<"进行出队"<<endl;
- int pop=data[front];
- cout<<pop<<"出队成功"<<endl;
- front++;
- return 1;
- }
- template <typename T>
- int Queue<T>::queue_size() // 队列长度
- {
-
- return (tail+MAX-front)%MAX;
- }
-
- template <typename T>
- int Queue<T>::queue_fullpop() //清空队列,全部出队
- {
- for(int i=front;i!=tail;i++)
- {
- cout<<data[i]<<"出队成功"<<endl;
- }
- cout<<"清空队列成功"<<endl;
- return 1;
- }
-
- int main()
- {
- Queue<int> q1;
- q1.queue_push(8);
- q1.queue_push(9);
- q1.queue_push(6);
- q1.queue_push(5);
- q1.queue_push(8);
- q1.queue_pop();
- q1.queue_pop();
- int size=q1.queue_size();
- cout<<"队列长度为"<<size<<endl;
-
- q1.queue_fullpop();
-
- return 0;
- }

2.思维导图
