栈与队列的顺序表示及实现实验报告+程序Word文件下载.docx

上传人:b****6 文档编号:20886736 上传时间:2023-01-26 格式:DOCX 页数:17 大小:421.91KB
下载 相关 举报
栈与队列的顺序表示及实现实验报告+程序Word文件下载.docx_第1页
第1页 / 共17页
栈与队列的顺序表示及实现实验报告+程序Word文件下载.docx_第2页
第2页 / 共17页
栈与队列的顺序表示及实现实验报告+程序Word文件下载.docx_第3页
第3页 / 共17页
栈与队列的顺序表示及实现实验报告+程序Word文件下载.docx_第4页
第4页 / 共17页
栈与队列的顺序表示及实现实验报告+程序Word文件下载.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

栈与队列的顺序表示及实现实验报告+程序Word文件下载.docx

《栈与队列的顺序表示及实现实验报告+程序Word文件下载.docx》由会员分享,可在线阅读,更多相关《栈与队列的顺序表示及实现实验报告+程序Word文件下载.docx(17页珍藏版)》请在冰豆网上搜索。

栈与队列的顺序表示及实现实验报告+程序Word文件下载.docx

#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、遍历顺序队列。

实验总结

此次实验,初步学会了建立顺序栈与顺序队列,并学会了栈和队列的基本算法,再次巩固了指针的用法。

巩固了在课本上学的知识,加深了对栈和队列的认识与掌握。

不过,在编程时,发觉自己在定义结构体和变量时,还有很多不足。

而且,在编写程序时,自己有点粗心大意,经常忘记加“;

”和“{}”等。

路漫漫其修远兮,还得上下而求索啊!

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

当前位置:首页 > 小学教育 > 语文

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

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