实验目的:
(1)掌握栈的顺序存储结构、链式存储结构及其基本操作
(2)掌握队列的顺序存储结构、链式存储结构及其基本操作。
实验内容:
(1)编程实现栈的以下基本操作:建栈,取栈顶元素,入栈,出栈。
(2)编程实现队列的以下基本操作:建队列,取队头元素,入队,出队。
实验代码:
#include<iostream>
using namespace std;
#define MAXSIZE 100
typedef struct//顺序栈
{
int *base;
int *top;
int stacksize;
}sqstack;
int initstack(sqstack &s);
int push(sqstack &s,int e);
int pop(sqstack &s,int e);
int gettop(sqstack &s);
#define MAXQSIZE 100
typedef struct//循环队列
{
int *base;
int f;
int r;
}sqqueue;
int initqueue(sqqueue &q);
int inqueue(sqqueue &q,int e);
int dequeue(sqqueue &q,int &e);
int gethead(sqqueue &q);
int main()
{
sqstack s;
sqqueue q;
cout<<"=============栈与队列的操作=============="<<endl;
cout<<"1.initstack 2.push 3.pop 4.gettop "<<endl;
cout<<"5.initqueue 6.inqueue 7.dequeue 8.gethead"<<endl;
cout<<"========================================="<<endl;
int state=0;
cout<<"input num to choose;";
cin>>state;
while(state)
{
switch(state)
{
case 1:initstack(s);break;
case 2:
int n;
cout<<"input elem:";
cin>>n;
push(s,n);break;
case 3:pop(s,1);break;
case 4:gettop(s);break;
case 5:initqueue(q);break;
case 6:
int n1;
cout<<"input elem:";
cin>>n1;
inqueue(q,n1);break;
case 7:int e;dequeue(q,e);break;
case 8:gethead(q);break;
}
cout<<"=============栈与队列的操作=============="<<endl;
cout<<"1.initstack 2.push 3.pop 4.gettop "<<endl;
cout<<"5.initqueue 6.inqueue 7.dequeue 8.gethead"<<endl;
cout<<"========================================="<<endl;
cout<<"input num to choose;";
cin>>state;
}
return 0;
}
int initqueue(sqqueue &q)
{
q.base=new int[MAXQSIZE];
if(!q.base)
{
cout<<"init fail"<<endl;
return 0;
}
q.f=q.r=0;
cout<<"initqueue succeed"<<endl;
return 1;
}
int inqueue(sqqueue &q,int e)
{
if((q.r+1)%MAXQSIZE==q.f)
{
cout<<"inqueue fail"<<endl;
return 0;
}
q.base[q.r]=e;
q.r=(q.r+1)%MAXQSIZE;
cout<<"inqueue succeed"<<endl;
}
int dequeue(sqqueue &q,int &e)
{
if(q.f==q.r)
{
cout<<"dequeue fail"<<endl;
return 0;
}
e=q.base[q.f];
q.f=(q.f+1)%MAXQSIZE;
cout<<"dequeue succeed"<<endl;
return 1;
}
int gethead(sqqueue &q)
{
if(q.f!=q.r)
{
cout<<"gethead succeed"<<endl;
cout<<"the sqqueue elem is "<<q.base[q.f]<<endl;
return 1;
}
}
int initstack(sqstack &s)
{
s.base=new int[MAXSIZE];
if(!s.base)
{
cout<<"init fail"<<endl;
return 0;
}
s.top=s.base;
s.stacksize=MAXSIZE;
cout<<"initstack succeed"<<endl;
return 1;
}
int push(sqstack &s,int e)
{
if(s.top-s.base==s.stacksize)
{
cout<<"push fail"<<endl;
}
*s.top++=e;
cout<<"push succeed"<<endl;
return 1;
}
int pop(sqstack &s,int e)
{
if(s.top==s.base)
{
cout<<"pop fail"<<endl;
}
e=*--s.top;
cout<<"pop succeed"<<endl;
return 1;
}
int gettop(sqstack &s)
{
if(s.top!=s.base)
{
cout<<"gettop succeed"<<endl;
cout<<"the stack elem is "<<*(s.top-1)<<endl;
return 1;
}
cout<<"gettop fail"<<endl;
return 0;
}