#include <iostream>
#define MAX 128
using namespace std;
template <typename T>
class Stack
{
private:
T data[MAX];
int top;
public:
Stack();
Stack(Stack &s);
//判空
bool stack_empty();
//判满
bool stack_full();
//入栈
int stack_push(int num);
//遍历栈
void stack_show();
//出栈
int stack_pop();
//获取栈顶元素
int stack_top();
//求栈的大小
int stack_size();
~Stack();
};
int main()
{
Stack<int> s;
s.stack_push(8);
s.stack_push(5);
s.stack_push(3);
s.stack_push(7);
s.stack_show();
s.stack_pop();
s.stack_show();
s.stack_top();
s.stack_size();
return 0;
}
template<typename T>
Stack<T>::Stack():top(-1){}
template<typename T>
Stack<T>::~Stack(){}
template<typename T>
Stack<T>::Stack(Stack &s):top(s.top){
for(int i=0;i<=top;i++)
data[i]=s.data[i];
}
//判空
template<typename T>
bool Stack<T>::stack_empty()
{
return -1==top;
}
//判满
template<typename T>
bool Stack<T>::stack_full()
{
return top == MAX-1;
}
//入栈
template<typename T>
int Stack<T>::stack_push(int num)
{
if(stack_full())
{
cout<<"入栈失败"<<endl;
return -1;
}
top++;
data[top]=num;
return 1;
}
//遍历栈
template<typename T>
void Stack<T>::stack_show()
{
if(stack_empty())
{
cout<<"栈空"<<endl;
return ;
}
int i=top;
for(;i>=0;i--)
{
cout<<data[i]<<" ";
}
cout<<endl;
}
//出栈
template<typename T>
int Stack<T>::stack_pop()
{
if(stack_empty())
{
cout<<"栈空"<<endl;
return -1;
}
data[top--];
return 1;
}
//获取栈顶元素
template<typename T>
int Stack<T>::stack_top()
{
if(stack_empty())
{
cout<<"栈空"<<endl;
return -1;
}
cout<<"栈顶元素:"<<data[top]<<endl;
return 1;
}
//求栈的大小
template<typename T>
int Stack<T>::stack_size()
{
cout<<"栈的大小为:"<<top+1<<endl;
return 1;
}
2.队
#include <iostream>
#define MAX 8
using namespace std;
template<typename T>
class Queue
{
T data[MAX];
int front;
int tail;
public:
Queue();
~Queue();
Queue(Queue &q);
//判空
bool queue_empty();
//判满
bool queue_full();
//入队
int queue_push(T num);
//遍历队
int queue_show();
//出队
int queue_pop();
//求队的长度
int queue_size();
};
int main()
{
Queue<int> q;
q.queue_push(8);
q.queue_push(5);
q.queue_push(3);
q.queue_push(7);
q.queue_show();
q.queue_size();
q.queue_pop();
q.queue_show();
return 0;
}
template<typename T>
Queue<T>::Queue():front(0),tail(0){}
template<typename T>
Queue<T>::~Queue(){}
//判空
template<typename T>
bool Queue<T>::queue_empty()
{
return front == tail;
}
//判满
template<typename T>
bool Queue<T>::queue_full()
{
return (tail+1)%MAX==front;
}
//入队
template<typename T>
int Queue<T>::queue_push(T num)
{
if(queue_full())
{
cout<<"入队失败"<<endl;
return -1;
}
data[tail]=num;
tail = (tail+1)%MAX;
return 1;
}
//遍历队
template<typename T>
int Queue<T>::queue_show()
{
if(queue_empty())
{
cout<<"队空"<<endl;
return -1;
}
int i=front;
for(;i!=tail;i=(i+1)%MAX)
{
cout<<data[i]<<" ";
}
cout<<endl;
}
//出队
template<typename T>
int Queue<T>::queue_pop()
{
if(queue_empty())
{
cout<<"队空"<<endl;
return -1;
}
front = (front+1)%MAX;
return 1;
}
//求队的长度
template<typename T>
int Queue<T>::queue_size()
{
cout<<(tail+MAX-front)%MAX<<endl;
return 1;
}