手动实现顺序栈,要求实现数据结构中,所有栈的相关操作
#include <iostream>
using namespace std;
#define Maxsize 20
template<typename T>
class stack
{
private:
T *data;
int size;
public:
int top;
stack():top(-1)
{
data=new T [Maxsize];
}
stack(int n):size(n),top(-1)
{
data=new T [size];
}
~stack()
{
delete [] data;
data = NULL;
}
int push(T e)
{
if(top==size-1)
{
return -1;
}
data[++top]=e;
return 0;
}
int pop()
{
if(top==-1)
{
return -1;
}
data[top--];
}
void show()
{
cout<<"栈的值为:"<<endl;
for(int i=0;i<=top;i++)
{
cout<<data[i]<<endl;
}
}
};
int main()
{
int n;
int size;
cout<<"请输入队列大小:";
cin>>size;
stack<int>s(size);
for(int i=0;i<size;i++)
{
cout<<"请输入值:"<<endl;
cin>>n;
s.push(n);
}
s.show();
return 0;
}
手动实现循环顺序队列,要求实现数据结构中,所有队列的相关操作
#include <iostream>
using namespace std;
template <typename T>
class Queue{
private:
int head;
int tail;
T *s;
int len;
public:
Queue(){}
Queue(int h):s(new T(h)), len(h){
this->head = 0;
this->tail = 0;
}
void QuereAdd(T q){
int n = (tail+len-head)%len;
if(n < len - 1){
*(s+tail) = q;
tail = (tail+1)%len;
return ;
}
cout << "队列满" << endl;
}
void QueueDelete(){
head += 1;
}
void show(){
int first = head;
while(first != tail){
cout << *(s+first) << " ";
first = (first+1)%len;
}
cout << endl;
}
};
int main()
{
Queue<int> Q1(5);
Q1.QuereAdd(1);
Q1.QuereAdd(2);
Q1.QuereAdd(3);
Q1.show();
Q1.QueueDelete();
Q1.show();
return 0;
}