栈与队列的顺序表示及实现实验报告+程序Word文件下载.docx
《栈与队列的顺序表示及实现实验报告+程序Word文件下载.docx》由会员分享,可在线阅读,更多相关《栈与队列的顺序表示及实现实验报告+程序Word文件下载.docx(17页珍藏版)》请在冰豆网上搜索。
![栈与队列的顺序表示及实现实验报告+程序Word文件下载.docx](https://file1.bdocx.com/fileroot1/2023-1/22/b6376b38-eb05-4439-8e45-3fc5f8f2acc2/b6376b38-eb05-4439-8e45-3fc5f8f2acc21.gif)
#include<
stdio.h>
stdlib.h>
malloc.h>
#defineMAXNUM100
#defineElemTypeint
#defineTRUE1
#defineFALSE0
//定义队列的顺序存储结构
typedefstruct
{
ElemTypequeue[MAXNUM];
intfront;
intrear;
}sqqueue;
//初始化顺序队列
intinitQueue(sqqueue*q)
if(!
q)returnFALSE;
q->
front=-1;
rear=-1;
returnTRUE;
}
//入队
intappend(sqqueue*q,ElemTypex)
{if(q->
rear>
=MAXNUM-1)returnFALSE
{q->
rear++;
q->
queue[q->
rear]=x;
returnTRUE;
}
//出队
ElemTypeDelete(sqqueue*q)
{ElemTypex;
if(q->
front==q->
rear)
{printf("
队列空!
\n"
);
return0;
x=q->
queue[++q->
front];
printf("
队头元素%d出队!
x);
returnx;
//判断队列是否为空
intEmpty(sqqueue*q)
{if(q->
rear)returnTRUE;
returnFALSE;
//获取队头元素
intgethead(sqqueue*q)
{ElemTypex;
if(q->
{printf("
x=q->
front+1];
printf("
\n队头元素:
%d出队\n"
//遍历队
voiddisplay(sqqueue*q)
{ints;
s=q->
front;
printf("
队列为空!
else
\n顺序队列依次为:
"
while(s<
q->
{s=s+1;
%d<
-"
q->
queue[s]);
顺序队列队尾元素所在位置为:
rear=%d\n,q->
rear);
书序队列队头元素所在位置为:
front=%d\n,q->
front);
}}
//建立顺序队列
voidSetsqqueue(sqqueue*q)
{intn,i,m;
\n请输入顺序队列的长度:
scanf("
%d"
&
n);
\n请依次输入顺序队列的元素值:
for(i=0;
i<
n;
i++)
{scanf("
m);
append(q,m);
//主函数
voidmain()
{sqqueue*head;
intx,select;
head=(squeue*)malloc(sizeof(squeue));
printf("
\n第一次使用必须初始化!
do{
printf("
\n********主菜单**********\n"
\n1初始化队列\n"
\n2建立顺序队列\n"
\n3入队\n"
\n4出队\n"
\n5判断队列是否为空\n"
\n6取队头元素\n"
\n7遍历队列\n"
\n0退出程序\n"
\n************************\n"
\n请选择操作:
scanf("
select);
switch(select)
{case1:
{initQueue(head);
printf("
已经初始化队列!
break;
case2:
{Setsqqueue(head)
printf("
\n已经建立队列!
dispaly(head);
break;
case3:
{printf("
请输入队的值:
scanf("
x);
append(head,x);
dispaly(head);
case4:
{Delete(head);
diapaly(head);
case5:
{if(Empty(head))
else
队列非空!
case6:
{gethead(head);
case7:
{dispaly(head);
case0:
exit(0);
}
}while(select<
=7);
//顺序栈
//定义栈的顺序存储结构
ElemTypestack[MAXNUM];
inttop;
}SqStack;
//初始化顺序栈
voidInitStack(SqStack*p)
p)
内存分配失败!
p->
top=-1;
//入栈
voidPush(SqStack*p,ElemTypex)
{if(p->
top<
MAXNUM-1)
{p->
top=p->
top+1;
p->
stack[p->
top]=x;
Overflow!
//出栈
ElemTypePop(SqStack*p)
if(p->
top>
=0)
{x=p->
top];
栈顶数据元素%d已经被删除!
p->
top]);
top-1;
return(x);
{printf("
Underflow!
return(0);
}}
//获取栈顶元素
ElemTypeGetTop(SqStack*p)
\n栈顶元素为:
%d\n"
//遍历顺序栈
voidOutStack(SqStack*p)
{inti;
0)
这是一个空栈!
for(i=p->
top;
i>
=0;
i--);
第%d个数据元素为:
%6d\n"
i,p->
stack[i]);
//置空顺序栈
voidsetEmpty(SqStack*p)
{p->
top=-1;
{SqStack*q;
intcord;
ElemTypea;
第一次使用必须初始化!
\n1初始化顺序栈\n"
\n2插入一个元素\n"
\n3删除栈顶元素\n"
\n4区栈顶元素\n"
\n5置空顺序栈\n"
\n6结束程序运行\n"
你选择的序号是(1,2,3,4,5,6)"
cord);
switch(cord)
{q=(SqStack*)malloc(sizeof(SqStack));
InitStack(q);
OutStack(q);
}break;
请输入要插入的元素:
a="
scanf("
a);
Push(q,a);
}break;
{Pop(q);
OutStack(q);
{GetTop(q);
{setEmpty(q);
\n顺序栈被置空!
}while(cord<
=6);
运行结果
1、初始化书序栈
2、
3、入栈及出栈
4、出栈及取栈顶元素
5、
6、初始化队列并输入顺序队列
7、插入新的队尾元素,即入队
8、删除队头数据元素,即出队
9、判断队列是否为空。
10、取队列头元素。
11、遍历顺序队列。
实验总结
此次实验,初步学会了建立顺序栈与顺序队列,并学会了栈和队列的基本算法,再次巩固了指针的用法。
巩固了在课本上学的知识,加深了对栈和队列的认识与掌握。
不过,在编程时,发觉自己在定义结构体和变量时,还有很多不足。
而且,在编写程序时,自己有点粗心大意,经常忘记加“;
”和“{}”等。
路漫漫其修远兮,还得上下而求索啊!
!