栈和队列的基本操作实验报告Word下载.docx
- 文档编号:19397040
- 上传时间:2023-01-05
- 格式:DOCX
- 页数:13
- 大小:72.72KB
栈和队列的基本操作实验报告Word下载.docx
《栈和队列的基本操作实验报告Word下载.docx》由会员分享,可在线阅读,更多相关《栈和队列的基本操作实验报告Word下载.docx(13页珍藏版)》请在冰豆网上搜索。
2、加“*”题目必做,其他题目任选;
多选者并且保质保量完成适当加分。
3、严格按照数据结构实验报告模板和规范,及时完成实验报告。
四、实验步骤
(说明:
依据实验内容分别说明实验程序中用到的数据类型的定义、主程序的流程以及每个操作(函数)的伪码算法、函数实现、程序编码、调试与分析。
附流程图与主要代码)
㈠、数据结构与核心算法的设计描述
(程序中每个模块或函数应加注释,说明函数功能、入口及出口参数)
1、栈的初始长度与需要再增加的长度
#defineSTACK_INIT_SIZE100;
#defineSTACKINCREMENT10;
typedefcharSElemType;
//定义SElemType为char型
2、栈的顺序存储表示
typedefstruct
{
SElemType*base;
SElemType*top;
intstacksize;
}SqStack;
3、队列的链式表示方法
typedefstructQNode
SElemTypedata;
structQNode*next;
}QNode,*QueuePtr;
QueuePtrfront;
QueuePtrrear;
}LinkQueue;
4、初始化栈
/*函数功能:
对栈进行初始化
参数:
栈(SqStack&
S)
成功返回1,否则返回0*/
intInitStack(SqStack&
S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));
//申请内存
if(!
S.base)//判断有无申请到空间
returnERROR;
//没有申请到内存,返回0
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
returnOK;
}
5、入栈操作
将元素入栈
S),插入元素e
插入成功返回1,否则返回0*/
intPush(SqStack&
S,SElemTypee)
if(S.top-S.base>
=S.stacksize)//判断栈顶与栈底的差是否大于栈的//容量
{
S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
//栈满了,重新申请内存
S.base)//判断是否申请成功
//不成功返回0
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
6、出栈操作
将栈中的元素弹出
参数:
S),记录元素e*/
intPop(SqStack&
S,SElemType&
e)
if(S.top==S.base)//判断栈是否为空
e=*(--S.top);
7、初始化队列
初始化队列
队列(LinkQueue&
Q)
成功返回1,否则返回0*/
intInitQueue(LinkQueue&
Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));
//申请结点的内存
Q.front)//判断有无申请到空间
//没有返回0
Q.front->
next=NULL;
8.在队列队尾插入元素
在队列队尾插入元素
Q),插入元素e
intEnQueue(LinkQueue&
Q,QElemTypee)
p=(QueuePtr)malloc(sizeof(QNode));
//申请新的结点
p)
p->
data=e;
next=NULL;
Q.rear->
next=P;
Q.rear=p;
9.删除队头元素
删除对头元素
Q),记录值e
intDeQueue(LinkQueue&
Q,QElemType&
if(Q.front==Q.rear)//判断队列是否为空
p=Q.front->
next;
e=p->
data;
next=p->
if(Q.rear==p)
Q.rear=Q.front;
free(p);
10、主函数
intmain()
SqStackS;
//声明一个栈
LinkQueueQ;
//声明一个队列
charm,k,c;
intn=0,i,j,t=0,z=0;
while(!
t)
cout<
<
"
请输入你要判断回文的字符串,输入@结束:
"
;
InitQueue(Q);
InitStack(S);
while((c=getchar())!
='
@'
)//对字符的判断不断输入字符
EnQueue(Q,c);
Push(S,c);
n++;
for(j=1;
j<
=n;
j++)
OutQueue(Q,m);
Pop(S,k);
if(m!
=k)
break;
if(j>
n)//如果j>
n则说明全部相等
cout<
这个字符串不是回文字符串"
<
endl;
else
这个字符串是回文字符串"
return0;
说明:
通过调用序列号不同的函数进行各种操作。
函数根据每次输入的数进行判断不在1—10内的函数将结束,否则将继续进行。
㈢程序调试及运行结果分析(应包含多组测试数据)
五、实验总结
通过这次试验,我知道自己还有很多不足,还会犯一些细节上的错误,但是也因此对栈和队列的操作有了很好的认识
附录
1、程序流程图
N
Y
N
2、程序清单
#include<
iostream>
malloc.h>
usingnamespacestd;
//栈的表示和实现
#defineSTACK_INIT_SIZE100
#defineSTACKINCREMENT10
#defineERROR0
#defineOK1
//队列的表示和实现
//关于栈的函数
S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));
S.base)
=S.stacksize)
if(S.top==S.base)
//关于队列的函数
Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));
Q.front)
Q,SElemTypee)
QueuePtrp=(QueuePtr)malloc(sizeof(QNode));
p)
next=p;
Q,SElemType&
if(Q.front==Q.rear)
QueuePtrp=Q.front->
//主函数
请输入你要判断回文的字符串:
DeQueue(Q,m);
n)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 队列 基本 操作 实验 报告