队列.docx
- 文档编号:27285661
- 上传时间:2023-06-28
- 格式:DOCX
- 页数:18
- 大小:43.14KB
队列.docx
《队列.docx》由会员分享,可在线阅读,更多相关《队列.docx(18页珍藏版)》请在冰豆网上搜索。
队列
班级:
数学101软件学号:
201012010225姓名:
田贵文实验组别:
实验日期:
报告日期:
成绩:
报告内容:
(目的和要求、原理、步骤、数据、计算、小结等)
实验名称:
栈和队列
一、实验目的及要求
1.栈的顺序存储和链式存储结构的类型定义方法及其基本操作算法
2.队列的顺序存储和链式存储结构的类型定义方法及其基本操作算法
3.掌握栈、队列的思想及其存储实现
4.掌握栈、队列的常见算法的程序实现
二、实验内容
1.编写函数,采用链式存储实现栈的初始化、入栈、出栈操作。
2.编写函数,采用顺序存储实现栈的初始化、入栈、出栈操作。
3.编写函数,采用链式存储实现队列的初始化、入队、出队操作。
4.编写函数,采用顺序存储实现队列的初始化、入队、出队操作。
5.编写一个主函数,在主函数中设计一个简单的菜单,分别调试上述算法。
三、实验结果
四、实验总结
通过此实验,我熟悉掌握了栈的顺序存储和链式存储结构的类型定义方法及其基本操作算法。
附录
#include
#include
#defineMAXSIZE256
typedefintdatatype;
typedefstructnode//定义链盏
{
datatypedata;
structnode*next;
}StackNode,QNode,*LinkStack;
typedefstruct//定义顺序盏
{
datatypedata[MAXSIZE];
intfront,rear;
intnum;
inttop;
}SeqStack,C_SeQueue;
typedefstruct//定义链队
{
QNode*front,*rear;
}LQueue;
LinkStackInit_LinkStack();//链盏初始化
LinkStackPush_LinkStack(LinkStacktop,datatypex);//链盏入盏
LinkStackPop_LinkStack(LinkStacktop,datatype*s);//链盏出盏
SeqStack*init_SeqStack();//顺序盏初始化
intPush_SeqStack(SeqStack*S,datatypex);//顺序盏入盏
intPop_SeqStack(SeqStack*S,datatype*p);//顺序盏出盏
LQueue*Init_LQueue();//链队初始化
voidIn_LQueue(LQueue*q,datatypex);//链队入队
intOut_LQueue(LQueue*q,datatype*s);//链队出队
C_SeQueue*init_SeQueue();//顺序队初始化
intIn_SeQueue(C_SeQueue*q,datatypex);//顺序队入队
intOut_SeQueue(C_SeQueue*q,datatype*p);//顺序队出队
intmain()
{
intn,m,t=1;
while(t)
{
printf("\n");
printf("1.链盏\n");
printf("2.顺序盏\n");
printf("3.链队\n");
printf("4.顺序队\n");
printf("0.结束\n");
scanf("%d",&n);
switch(n)
{
case1:
//选择链盏相关操作
{
LinkStackL=NULL;
while(t)
{
printf("\n");
printf("1.初始化\n");
printf("2.入盏\n");
printf("3.出盏\n");
printf("4.返回上一层\n");
scanf("%d",&m);
if(m==4)
break;
else
{
switch(m)
{
case1:
L=Init_LinkStack();break;//链盏初始化
case2:
{LinkStackp;//链盏入盏
datatypex;
printf("请输入x:
\n");
scanf("%d",&x);
L=Push_LinkStack(L,x);
p=L->next;
while(p)
{
printf("%d",p->data);
p=p->next;
}
break;
}
case3:
{
datatypex,*s;
LinkStackp;
s=&x;
L=Pop_LinkStack(L,s);
p=L->next;
while(p)
{
printf("%d",p->data);
p=p->next;
}
printf("出盏数:
%d",x);
break;
}
case4:
break;
}
}
}
}break;
case2:
{//选择顺序盏相关操作
SeqStack*S;
while(t)
{
printf("\n");
printf("1.初始化\n");
printf("2.入盏\n");
printf("3.出盏\n");
printf("4.返回上一层\n");
scanf("%d",&m);
if(m==4)
break;
else
{
switch(m)
{
case1:
S=init_SeqStack();break;//顺序盏初始化
case2:
{//顺序盏入盏
inti,success;
datatypex;
printf("请输入x:
\n");
scanf("%d",&x);
success=Push_SeqStack(S,x);
if(success==1)
{
for(i=0;i<=S->top;i++)
{
printf("%d",S->data[i]);
}
}
else
printf("stackfull!
\n");
}
break;
case3:
{//顺序盏出盏
inti,success;
datatypex,*p;
p=&x;
success=Pop_SeqStack(S,p);
if(success==1)
{
for(i=0;i<=S->top;i++)
{
printf("%d",S->data[i]);
}
printf("出盏数:
%d",x);
}
else
printf("stackempty!
\n");
}break;
}
}
}
}
case3:
{//链队相关操作
LQueue*Q=NULL;
while(t)
{
printf("\n");
printf("1.初始化\n");
printf("2.入队\n");
printf("3.出队\n");
printf("4.返回上一层\n");
scanf("%d",&m);
if(m==4)
break;
else
{
switch(m)
{
case1:
Q=Init_LQueue();//链队初始化
break;
case2:
{//链队入队
datatypex;
QNode*p;
printf("请输入x:
\n");
scanf("%d",&x);
In_LQueue(Q,x);
p=Q->front->next;
while(p!
=NULL)
{
printf("%d",p->data);
p=p->next;
}
}
break;
case3:
{//链队出队
intflag;
datatypex,*s;
QNode*p;
s=&x;
flag=Out_LQueue(Q,s);
p=Q->front->next;
if(flag==1)
{
while(p!
=NULL)
{
printf("%d",p->data);
p=p->next;
}
printf("出队为:
%d\n",x);
}
else
printf("queueempty!
\n");
}break;
}
}
}
}
case4:
{//顺序队的相关操作
C_SeQueue*Q;
while(t)
{
printf("\n");
printf("1.初始化\n");
printf("2.入队\n");
printf("3.出队\n");
printf("4.返回上一层\n");
scanf("%d",&m);
if(m==4)
break;
else
{
switch(m)
{
case1:
Q=init_SeQueue();break;//顺序队初始化
case2:
{//顺序队入队
inti,flag,number;
datatypex;
printf("请输入x:
\n");
scanf("%d",&x);
flag=In_SeQueue(Q,x);
number=Q->num;
if(flag==1)
{
for(i=(Q->front+1)%MAXSIZE;number>0;number--,i=(i+1)%MAXSIZE)
{
printf("%d",Q->data[i]);
}
}
else
printf("queuefull!
\n");
}
break;
case3:
{
inti,flag,number;
datatypex,*p;
p=&x;
flag=Out_SeQueue(Q,p);
number=Q->num;
if(flag==1)
{
for(i=(Q->front+1)%MAXSIZE;number>0;number--,i=(i+1)%MAXSIZE)
{
printf("%d",Q->data[i]);
}
printf("出队为:
%d\n",x);
}
else
printf("queueempty!
\n");
}break;
}
}
}
}
case0:
return0;
}
}
return0;
}
LinkStackInit_LinkStack()//链盏初始化函数
{
StackNode*L;
L=(StackNode*)malloc(sizeof(StackNode));
L->data=-32767;
L->next=NULL;
returnL;
}
LinkStackPush_LinkStack(LinkStacktop,datatypex)//链盏入盏函数
{
StackNode*s;
s=(StackNode*)malloc(sizeof(StackNode));
s->data=x;
s->next=top->next;
top->next=s;
returntop;
}
LinkStackPop_LinkStack(LinkStacktop,datatype*s)//链盏出盏函数
{
StackNode*p;
intj=0;
p=top->next;
if(p!
=NULL)
{
*s=p->data;
top->next=p->next;
free(p);
}
returntop;
}
SeqStack*init_SeqStack()//顺序盏初始化函数
{
SeqStack*S;
S=(SeqStack*)malloc(sizeof(SeqStack));
S->top=-1;
returnS;
}
intPush_SeqStack(SeqStack*S,datatypex)//顺序盏入盏函数
{
if(S->top==MAXSIZE-1)
{
return(0);
}
else
{
S->top++;
S->data[S->top]=x;
return
(1);
}
}
intPop_SeqStack(SeqStack*S,datatype*p)//顺序盏出盏函数
{
{
*p=S->data[S->top];
S->top--;
return1;
}
}
LQueue*Init_LQueue()//链队初始化函数
{
LQueue*q;
QNode*p;
q=(LQueue*)malloc(sizeof(LQueue));
p=(QNode*)malloc(sizeof(QNode));
p->next=NULL;
q->front=q->rear=p;
returnq;
}
voidIn_LQueue(LQueue*q,datatypex)//链队入队函数
{
QNode*p;
p=(QNode*)malloc(sizeof(QNode));
p->data=x;
p->next=NULL;
q->rear->next=p;
q->rear=p;
}
intOut_LQueue(LQueue*q,datatype*s)//链队出队函数
{
QNode*p;
p=q->front->next;
q->front->next=p->next;
*s=p->data;
free(p);
if(q->front->next==NULL)
q->rear=q->front;
return1;
}
C_SeQueue*init_SeQueue()//顺序队初始化函数
{
C_SeQueue*q;
q=(C_SeQueue*)malloc(sizeof(C_SeQueue));
q->front=q->rear=MAXSIZE-1;
q->num=0;
returnq;
}
intIn_SeQueue(C_SeQueue*q,datatypex)//顺序队入队函数
{
if(q->num==MAXSIZE)
{
return(-1);
}
else
{
q->rear=(q->rear+1)%MAXSIZE;
q->data[q->rear]=x;
q->num++;
return
(1);
}
}
intOut_SeQueue(C_SeQueue*q,datatype*p)//顺序队出队
{
if(q->num==0)
{
return-1;
}
else
{
q->front=(q->front+1)%MAXSIZE;
*p=q->data[q->front];
q->num--;
return1;
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 队列