实验二.docx

上传人:b****8 文档编号:30457951 上传时间:2023-08-15 格式:DOCX 页数:14 大小:294.33KB
下载 相关 举报
实验二.docx_第1页
第1页 / 共14页
实验二.docx_第2页
第2页 / 共14页
实验二.docx_第3页
第3页 / 共14页
实验二.docx_第4页
第4页 / 共14页
实验二.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

实验二.docx

《实验二.docx》由会员分享,可在线阅读,更多相关《实验二.docx(14页珍藏版)》请在冰豆网上搜索。

实验二.docx

实验二

班级:

学号:

姓名:

实验组别:

实验日期:

报告日期:

成绩:

报告内容:

(目的和要求、原理、步骤、数据、计算、小结等)

实验名称:

栈与队列

一、实验目的

(1)掌握栈、队列的思想及其存储实现。

(2)掌握栈、队列的常见算法的程序实现。

二、实验要求

(1).编写函数,采用链式存储实现栈的初始化、入栈、出栈操作。

(2).编写函数,采用顺序存储实现栈的初始化、入栈、出栈操作。

(3).编写函数,采用链式存储实现队列的初始化、入队、出队操作。

(4).编写函数,采用顺序存储实现队列的初始化、入队、出队操作。

(5).编写一个主函数,在主函数中设计一个简单的菜单,分别调试上述算法。

三、实验原理(流程图):

四、实验数据(源代码):

#include

#defineERROR0

#defineOK1

#defineMAX100//栈的最大值

usingnamespacestd;

typedefintSElemType;

typedefintQElemType;

typedefstruct

{SElemType*base;

SElemType*top;

}SqStack;

voidInitStacka(SqStack&S)//顺序存储实现栈的初始化

{

S.base=(SElemType*)newSElemType[MAX];

if(!

S.base)cout<<"申请空间失败";

S.top=S.base;

}

voidPusha(SqStack&S,intx)//顺序存储实现栈的入栈操作

{if(S.top-S.base>=MAX)cout<<"栈已满";

*S.top++=x;

}

voidPopa(SqStack&S)//顺序存储实现栈的出栈操作

{SElemType*p;

intx;

if(S.top==S.base)return;

else{p=S.top;

x=*--S.top;

cout<<"删除的栈顶元素是"<

"<

}

}

voidprinta(SqStackS)//输出

{SElemType*p;

p=S.base;

cout<

while(p!

=S.top)

{cout<<*(p++);}

cout<

}

typedefstructSqNode

{SElemTypedata;

SqNode*Link;

}*Sqptr,NODE;

typedefstruct

{Sqptrtop;

}Stack;

voidInitStackb(Stack&S)//链式存储实现栈的初始化

{;

S.top=(Sqptr)newNODE;

if(!

S.top)cout<<"申请空间失败";

S.top->Link=NULL;

}

voidPushb(Stack&S,intx)//链式存储实现栈的入栈操作

{Sqptrp;

p=(Sqptr)newNODE;

if(!

p)return;

p->data=x;

p->Link=S.top->Link;

S.top->Link=p;

}

voidPopb(Stack&S)//链式存储实现栈的出栈操作

{intx;

Sqptrp;

if(S.top->Link==NULL)return;

else{p=S.top->Link;

x=p->data;

S.top->Link=p->Link;

cout<<"删除的栈顶元素是"<

free(p);}

}

typedefstructQNode

{QElemTypedata;

structQNode*next;

}*QueuePtr,QNode;

typedefstruct

{QueuePtrfront;

QueuePtrrear;

}LinkQueue;

voidInitQueue(LinkQueue&Q)//链式存储实现队列的初始化

{

Q.front=Q.rear=(QueuePtr)newQNode;

if(!

Q.front)cout<<"申请空间失败";

Q.front->next=NULL;

}

voidEnQueue(LinkQueue&Q,QElemTypex)//链式存储实现队列的入队

{QueuePtrp;

p=(QueuePtr)newQNode;

if(!

p)cout<<"栈已满";

p->data=x;

p->next=NULL;

Q.rear->next=p;

Q.rear=p;

}

voidDeQueue(LinkQueue&Q)//链式存储实现队列的出队

{intx;

if(Q.front==Q.rear)return;

QueuePtrp;

p=Q.front->next;

x=p->data;

cout<<"删除的队头元素是:

"<

Q.front->next=p->next;

if(Q.rear==p)Q.rear=Q.front;

free(p);

return;

}

typedefstruct

{SElemType*base;

intfront,rear;

}SqQueue;

voidInitQueueb(SqQueue&S)//顺序存储实现队列的初始化

{

S.base=(SElemType*)newSElemType[MAX];

if(!

S.base)cout<<"申请空间失败";

S.front=S.rear=0;

}

voidEnQueueb(SqQueue&S,intx)//顺序存储实现队列的入队

{if((S.rear+1)%MAX==S.front)return;

S.base[S.rear]=x;

S.rear=(S.rear+1)%MAX;

}

voidDeQueueb(SqQueue&S)//顺序存储实现队列的出队

{intx;

if(S.front==S.rear)return;

x=S.base[S.front];

S.front=(S.front+1)%MAX;

cout<<"删除的队头元素是:

"<

}

intmain()

{intchoice;

do

{

intn,x;

inttui=1;

cout<

cout<<"栈与队列";

cout<

cout<<"---------------------------------------------"<

cout<<"1.采用顺序存储实现栈的初始化、入栈、出栈操作"<

cout<<"2.采用链式存储实现栈的初始化、入栈、出栈操作"<

cout<<"3.采用顺序存储实现队列的初始化、入队、出队操作"<

cout<<"4.采用链式存储实现队列的初始化、入队、出队操作"<

cout<<"5.退出使用"<

cout<<"---------------------------------------------"<

cout<<"请选择:

";

cin>>choice;

switch(choice)

{case1:

SqStackS;

cout<<"---------------------------------------------"<

cout<<"1.顺序存储实现栈的初始化"<

cout<<"2.顺序存储实现栈的入栈操作"<

cout<<"3.顺序存储实现栈的出栈操作"<

cout<<"4.退出\n";

cout<<"---------------------------------------------"<

while(tui){

cout<<"请选择:

";

cin>>n;

switch(n)

{case1:

InitStacka(S);

cout<<"顺序存储栈的初始化完成!

"<

break;

case2:

cout<<"以'0'结束"<

cout<

cin>>x;

while(x)

{

Pusha(S,x);

cin>>x;}

cout<<"顺序存储栈的入栈操作完成!

"<

printa(S);

break;

case3:

Popa(S);

printa(S);

break;

case4:

tui=0;

}

}

break;

case2:

StackSa;

cout<<"---------------------------------------------"<

cout<<"1.链式存储实现栈的初始化"<

cout<<"2.链式存储实现栈的入栈操作"<

cout<<"3.链式存储实现栈的出栈操作"<

cout<<"---------------------------------------------"<

while

(1){

cout<<"请选择:

";

cin>>n;

switch(n)

{case1:

InitStackb(Sa);

cout<<"链式存储栈的初始化完成!

"<

break;

case2:

cout<<"以'0'结束\n"<

cout<

cin>>x;

while(x){

Pushb(Sa,x);cin>>x;}

cout<<"链式存储栈的入栈操作完成!

"<

case3:

Popb(Sa);break;}}break;

case3:

SqQueueSv;

cout<<"---------------------------------------------"<

cout<<"1.顺序存储实现队的初始化"<

cout<<"2.顺序存储实现队的入栈操作"<

cout<<"3.顺序存储实现队的出栈操作"<

cout<<"---------------------------------------------"<

while

(1){

cout<<"请选择:

";

cin>>n;

switch(n)

{case1:

InitQueueb(Sv);

cout<<"链式存储栈的初始化完成!

"<

case2:

cout<<"以'0'结束\n"<>x;

while(x){

EnQueueb(Sv,x);scanf("%d",&x);}

cout<<"链式存储栈的入栈操作完成!

"<

case3:

DeQueueb(Sv);

break;

}

}break;

case4:

LinkQueueQ;

cout<<"---------------------------------------------"<

cout<<"1.链式存储实现队的初始化"<

cout<<"2.链式存储实现队的入栈操作"<

cout<<"3.链式存储实现队的出栈操作"<

cout<<"---------------------------------------------"<

while

(1)

{cout<<"请选择:

";

cin>>n;

switch(n)

{

case1:

InitQueue(Q);

cout<<"链式存储队的初始化完成!

"<

break;

case2:

cout<<"以'0'结束";cout<

cin>>x;

while(x){

EnQueue(Q,x);cin>>x;}

cout<<"链式存储队的入栈操作完成!

"<

case3:

DeQueue(Q);

break;

}

}break;

}

}while(choice!

=5);

return0;

}

五、程序运行结果:

1.采用顺序存储实现栈的初始化、入栈、出栈操作。

图2

2.采用链式存储实现栈的初始化、入栈、出栈操作

图2

3.采用顺序存储实现队列的初始化、入队、出队操作。

图3

4.采用链式存储实现队列的初始化、入队、出队操作

图4

5.退出使用

图5

六、实验小结:

通过本实验让我学习了链式存储和顺序存储,也让我对于栈和队列这两种重要的数据结构有了深入的了解,让我更清楚了栈与队列各自特点以及他们的差异。

另外也清楚了这两种结构的内存储存方式,对于我将来的学习编程有很大的好处。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 临床医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1