实验项目名称
栈的应用
一. 实验目的
掌握栈的特点(先进后出FILO)及基本操作,如入栈、出栈等,栈的顺序存储结构和链式存储结构,以便在实际问题背景下灵活应用。
三.实验内容
1.顺序栈的实现和运算
2.链栈的实现和运算
四、主要仪器设备及耗材
VC++6.0运行环境实现其操作
五.程序算法
1>.顺序栈的实现
a. 顺序栈的数据类型
CONST int maxsize=maxlen; //定义栈的最大容量为maxlen
Struct seqstack
{elemtype stack[maxsize]; //将栈中元素定义为elemtype类 型
int top; //指向栈顶位置的指针(数组编号)
}
b. 初始化栈
void inistack(seqstack &s)
{
s.top=0;
}
c. 进栈
void push(seqstack &s, elemtype x)
{
if (s.top==maxsize-1} cout<<”overflow”;
else
{
s.top++;
s.stack[s.top]=x;
}
}
d. ) 退栈
void pop(seqstack &s)
{
if (s.top= =0) cout<<”underflow”;
else
s.top--;
}
e. ) 取栈顶元素
elemtype gettop(seqstack s)
{
if (s.top= =0)
{ cout<<”underflow”;
return 0;}
else return s.stack[s.top];
}
f. ) 判栈空否
int empty(seqstack s)
{
if (s.top= =0) return 1;
else return 0;
}
2>.链栈的实现
a. 栈初始化
void inistack(link *top)
{ top->next=NULL;}
b. 进栈运算
void push(link *top,int x)
{ link *s;
s=new link;
s->data=x;
s->next=top->next; //头插法
top->next=s; }
c. 退栈运算
void pop(link *top)
{
link *s;
s=top->next;
if(s!=NULL)
{
top->next=s->next;
delete(s);
}
}
d. 取栈顶元素
elemtype gettop(link *top)
{
if(top->next!=NULL)
return(top->next->data);
else
return(NULL);
}
e. 判栈空
int empty(link *top)
{
if(top->next==NULL)
return(1);
else
return(0);
}
六.程序源代码
1>.顺序栈的实现代码
#include
#define max 100
struct seqstack
{
int stack[max];
int top;
};
void init(seqstack &s) /*初始化*/
{
s.top=0;
//return 1;
}
void push(seqstack &s,int x) /*入栈操作*/
{
if (s.top==max)
cout<<"the stack is overflow!";
else
{
s.top++;
s.stack[s.top]=x;
}
}
void display(seqstack &s) /*显示栈所有数据*/
{
int t;
t=s.top;
if(t==0)
cout<<"the stack is empty!";
else
{ cout<<"从栈顶到栈底输出:"<";
t--;
}
}
cout<
记录
混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载
*/
{
if(s.top==0)
cout<<"the stack is empty!";
else
s.top--;
}
int gettop(seqstack s) /*得到栈顶数*/
{
if(s.top==0)
return 0;
else
return s.stack[s.top];
}
int IsEmpty(seqstack s) {
if(s.top == 0) return 1;
return 0;
}
main()
{
seqstack p;
int i,x,y;
init(p);
cout<<"输入元素到0时为止"<>i;
while(i)
{
push(p,i);
cin>>i;
}
pop(p);
x=gettop(p);
cout<<"x="<.链栈的实现代码
#include
typedef struct QNode
{
char data;
QNode *next;
}QNode,*QueuePtr;
typedef struct
{
QueuePtr front;
QueuePtr rear;
}LinkQueue;
InitQueue(LinkQueue &Q)
{
Q.front=Q.rear=new QNode;
Q.front->next=NULL;
return 0;
}
EnQueue(LinkQueue &Q,char e)
{
QueuePtr p;
p=new QNode;
p->data=e;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
return 0;
}
void disp(LinkQueue &Q) //打印队列
{
QueuePtr p;
p=Q.front->next;
while(p!=NULL)
{
cout<data<<"->";
p=p->next;
}
}
DeQueue(LinkQueue &Q,char &e)
{
QueuePtr p;
if(Q.front==Q.rear)return 1;
p=Q.front->next;
e=p->data;
Q.front->next=p->next;
if(Q.rear==p)
Q.rear=Q.front;
delete p;
return 0;
}
void main()
{
LinkQueue Q;
char e,e1;
InitQueue(Q);
cout<<"输入队列元素,0时结束:"<>e;
while(e!='0'){
EnQueue(Q,e);
cin>>e;
}
cout<<"队列为:"<.顺序栈的实验结果
2>.链栈的实验结果
八、思考讨论题或体会或对改进实验的建议
(1)体会
a.C++语言知识不懂,需要好好学习;
b.对单链表不够熟悉,要多练习创建单链表及其基本操作。
九、参考资料
a.《数据结构》 李根强主编 中国国水利水电出版社
b.《C++语言程序设计》 郑莉 董渊 何江舟编 清华大学出版社