实验二栈队列的实现实验报告.docx
- 文档编号:2481662
- 上传时间:2022-10-30
- 格式:DOCX
- 页数:15
- 大小:67.66KB
实验二栈队列的实现实验报告.docx
《实验二栈队列的实现实验报告.docx》由会员分享,可在线阅读,更多相关《实验二栈队列的实现实验报告.docx(15页珍藏版)》请在冰豆网上搜索。
实验二栈队列的实现实验报告
中国矿业大学计算机科学与技术系试验报告
课程名称________数据结构_______试验名称____栈、队列算法设计_________________
班级__信科10-4班__姓名__纵兆丹_学号___08103575__仪器组号____实验日期____
实验报告要求:
1.实验目的2.实验内容3.实验步骤4.程序清单
5.运行结果6.流程图7.实验体会
一实验目的
1熟悉栈、队列这种特殊线性结构的特性;
2熟练掌握栈、队列在顺序存储结构和链表存储结构下的基本操作。
二、实验要求:
1实验之前认真准备,编写好源程序。
2实验中认真调试程序,对运行结果进行分析,注意程序的正确性和健壮性的验证。
3不断积累程序的调试方法。
三、实验内容
基本题(必做):
1分别就栈的顺序存储结构和链式存储结构实现栈的各种基本操作。
2假设以带头结点的循环链表表示队列,并且只设一个指针指向对尾结点,不设
头指针,试设计相应的置队空、入队和出队的程序。
加强题:
3设线性表A中有n个字符,试设计程序判断字符串是否中心对称,例如xyzyx和xyzzyx都是中心对称的字符串。
四、程序清单
基本题:
1.#include
#include
#include
constSTACK_INIT_SIZE=100;//存储空间初始分配量
constSTACKINCREMENT=10;//存储空间分配增量
typedefstruct{
int*base;//在构造之前和销毁之后,base的值为NULL
int*top;//栈顶指针
intstacksize;//当前已分配的存储空间,以元素为单位
}SqStack;
voidInitStack(SqStack&S){
//构造一个空栈S
S.base=(int*)malloc(STACK_INIT_SIZE*sizeof(int));
if(!
S.base)
exit(0);//存储分配失败
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
//cout<<"初始化完毕"< }//InitStack voidGetTop(SqStackS,int&e){ //若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR if(S.top==S.base) {cout<<"此栈为空! ! ! "< exit(0); } e=*(S.top-1); cout< //cout<<"取值结束"< }//GetTop voidPush(SqStack&S,inte){ //插入元素e为新的栈顶元素 if(S.top-S.base>S.stacksize){//栈满,追加存储空间 S.base=(int*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int)); if(! S.base) {cout<<"新分配空间失败! ! ! "< exit(0); } S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; } *S.top++=e; //cout<<"插入元素成功"< }//Push voidPop(SqStack&S,int&e){ //若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR if(S.base==S.top) {cout<<"此栈为空栈,无法删除! ! ! "< exit(0); } e=*--S.top; //cout<<"删除成功! ! ! "< }//Pop voidClearStack(SqStack&S){ //把S置为空栈 if(S.base==S.top) cout<<"此栈已经为空! ! ! "< S.top=S.base; }//ClearStack voidmain(){ SqStackStack; intm,n,x,y,z,i=0; InitStack(Stack); cout<<"请输入您要建立的栈的大小: "< cin>>n; Stack.stacksize=n; do{ cout<<"请选择操作: "< cout<<""<<"1,进栈2,出栈3,查看栈顶值4,清空栈5,退出"< cin>>m; switch(m){ case1: cout<<"请输入进栈值: "< cin>>z; if(i==Stack.stacksize) { cout<<"Sorry! ! ! "< ! "< ! ! "< exit(0); } Push(Stack,z); i++; break; case2: Pop(Stack,x); cout< break; case3: cout<<"栈顶值为: "< GetTop(Stack,y); break; case4: ClearStack(Stack); break; case5: cout<<"Exit! ! "< break; default: cout<<"输入错误! ! ! 此程序将退出! ! ! "< exit(0); }//switch }while(m! =5); getch(); } 2.#include #include #include #include //链式栈 typedefstructStack{ Stack*next; intdata; }Stack,*SLink; typedefstruct{ SLinktop; intlength; }SqStack; voidInitStack(SqStack&S){ //构造一个空栈 S.top=NULL;//设栈顶指针的初值为"空" S.length=0;//空栈中元素个数为 }//InitStack voidPush(SqStack&S,int&e){ //在栈顶之上插入元素e为新的栈顶元素 SLinkp; p=newStack;//建新的结点 p->data=e; p->next=S.top; S.top=p; ++S.length; }//Push voidPop(SqStack&S,int&e){ //若栈不空,则删除S的栈顶元素,用e返回其值 if(! S.top) {cout<<"此栈为空栈! ! ! "< exit(0); } e=S.top->data; S.top=S.top->next; }//Pop voidGetTop(SqStack&S,int&e){ //若栈不空,取栈顶元素,用e返回其值 if(! S.top) {cout<<"此栈为空栈! ! ! "< exit(0); } e=S.top->data; cout< }//GetTop voidClearStack(SqStack&S){ // if(! S.top) cout<<"此栈已经为空! ! ! "< S.top=NULL; }//ClearStack voidmain(){ SqStackStack; InitStack(Stack); intm,n,x,y,z,i=0; cout<<"请输入您要建立的栈的大小: "< cin>>n; //需改正! ! ! do{ cout<<"请选择操作: "< cout<<""<<"1,进栈2,出栈3,查看栈顶值4,清空栈5,退出"< cin>>m; switch(m){ case1: cout<<"请输入进栈值: "< cin>>z; if(i==n) { cout<<"Sorry! ! ! "< ! "< ! ! "< exit(0); } Push(Stack,z); i++; break; case2: Pop(Stack,x); cout< break; case3: cout<<"栈顶值为: "< GetTop(Stack,y); break; case4: ClearStack(Stack); break; case5: cout<<"Exit! ! "< break; default: cout<<"输入错误! ! ! 此程序将退出! ! ! "< exit(0); }//switch }while(m! =5); getch(); getch(); } #include #include #include //队空、入队和出队 intn=0; typedefstructQ{ intdata; Q*next; }Q,*QLink; voidInitQ(QLink&q){ //构造一个队列 q->next=q; }//InitQ voidPush(QLink&q,int&e){ //入队 QLinkp; p=newQ; p->data=e; p->next=q->next; q->next=p; n++; }//Push voidOutQ(QLink&q,int&e){ //出队 QLinkp; QLinkt; p=newQ; t=newQ; p=q; inti; for(i=0;i<=n;i++){ if(p->next->data==e) { t=p->next; p->next=t->next; deletet; break; }//if p=p->next; }//for if(i==(n+1)){ cout<<"您所输入的值不存在! 此程序将退出! ! "< exit(0); } }//OutQ voidClearQ(QLink&q){
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 队列 实现 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)