数据结构_实验三_栈和队列和应用32362.pdf
《数据结构_实验三_栈和队列和应用32362.pdf》由会员分享,可在线阅读,更多相关《数据结构_实验三_栈和队列和应用32362.pdf(33页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、.实验编号:3 师大数据结构实验报告 2016 年 10 月 29 日 实验三 栈和队列及其应用_ 一实验目的及要求(1)掌握栈和队列这两种特殊的线性表,熟悉它们的特性,在实际问题背景下灵活运用它们;(2)本实验训练的要点是“栈”的观点及其典型用法;(3)掌握问题求解的状态表示及其递归算法,以及由递归程序到非递归程序的转化方法。二实验容(1)编程实现栈在两种存储结构中的基本操作(栈的初始化、判栈空、入栈、出栈等);(2)应用栈的基本操作,实现数制转换(任意进制);(3)编程实现队列在两种存储结构中的基本操作(队列的初始化、判队列空、入队列、出队列);(4)利用栈实现任一个表达式中的语法检查(括
2、号的匹配)。(5)利用栈实现表达式的求值。注:(1)(3)必做,(4)(5)选做。三主要仪器设备及软件(1)PC 机(2)Dev C+,Visual C+,VS2010 等 四实验主要流程、基本操作或核心代码、算法片段(该部分如不够填写,请另加附页)(1)编程实现栈在两种存储结构中的基本操作(栈的初始化、判栈空、入栈、出栈等);A.顺序储存:代码部分:/Main.cpp:#includeSStack.h int main()SqStack S;SElemType e;.int elect=1;InitStack(S);cout 已经创建一个存放字符型的栈 elect;cout endl;swi
3、tch(elect)case 1:cout e;Push(S,e);break;case 2:if(Pop(S,e)cout e is pop endl;elsecoutblankendl;break;case 3:if(StackEmpty(S)cout 栈空 endl;else cout 栈未空 endl;break;.case 4:GetTop(S,e);cout e is e endl;break;case 5:StackLength(S);break;case 0:break;DestroyStack(S);return OK;/SStack.cpp:#includeSStack.h
4、/输出菜单 void Muse()cout 请选择功能:endl;cout 1.入栈 endl;cout 2.出栈 endl;cout 3.判栈空 endl;cout 4.返回栈顶部数据 endl;cout 5.栈长 endl;cout 0.退出系统 endl;cout=STACK_INIT_SIZE)S.base=(SElemType*)realloc(S.base,(STACK_INIT_SIZE+STACKINCREMENT)*sizeof(SElemType);if(!S.base)exit(ERROR);S.top=S.base+S.stacksize;S.stacksize+=ST
5、ACKINCREMENT;*S.top+=e;return OK;/出栈 Status Pop(SqStack&S,SElemType&e).if(S.base=S.top)return ERROR;e=*-S.top;coutpop succeedendl;return OK;/判栈空 Status StackEmpty(SqStack S)if(S.top=S.base)return ERROR;return OK;/销毁栈 Status DestroyStack(SqStack&S)free(S.base);S.top=NULL;S.stacksize=0;cout 栈已销毁 endl;
6、return OK;int StackLength(SqStack S)cout StackLength is S.top-S.base endl;return OK;./SStack.h:#include#include using namespace std;const int STACK_INIT_SIZE=100;const int STACKINCREMENT=10;const int ERROR=0;const int OK=1;typedef char SElemType;typedef int Status;typedef struct SElemType*base;SElem
7、Type*top;int stacksize;SqStack;Status InitStack(SqStack&S);/创建顺序存储的栈 Status GetTop(SqStack S,SElemType&e);/得到栈顶数据 Status Push(SqStack&S,SElemType&e);/入栈 Status Pop(SqStack&S,SElemType&e);/出栈 void Muse();/输出菜单界面 Status StackEmpty(SqStack S);/判断栈是否为空 Status DestroyStack(SqStack&S);/销毁栈 int StackLength
8、(SqStack S);/计算栈的长度 运行结果:.B.链式储存:代码部分:/Main.cpp#includeLstack.h int main()Lq_Stack L;if(InintStack(L)coutbuild stack succeeddata=0;L-next=NULL;return OK;Status push(Lq_Stack&L,SElemType e)/入栈 LqStack*p;p=(LqStack*)malloc(sizeof(LqStack);if(!p)exit(ERROR);p-data=e;L-data+;p-next=L-next;L-next=p;retur
9、n OK;Status pop(Lq_Stack&L,SElemType&e)/出栈 LqStack*p;if(L-next=NULL)return ERROR;p=L-next;e=p-data;L-next=p-next;L-data-;free(p);return OK;Status GetTop(Lq_Stack L,SElemType&e)./得到栈顶数据 if(L-next=NULL)return ERROR;e=L-next-data;return OK;Status StackEmpty(Lq_Stack L)/判断栈是否为空 if(L-next=NULL)return ERR
10、OR;else return OK;int StackLength(Lq_Stack L)/计算栈的长度 return L-data;Status DestroyStack(Lq_Stack&L)/销毁栈 LqStack*p;while(!L)L=p;L=L-next;free(p);return OK;void Menu(Lq_Stack&L,SElemType e)/输出菜单选择执行的功能 int select=1;while(select).coutendl;cout请选择功能endl;cout1.入栈endl;cout2.出栈endl;cout3.得到顶部数据endl;cout4.判断
11、栈是否为空endl;cout5.输出栈的长度endl;cout0.退出程序endl;coutselect;switch(select)case 0:break;case 1:coute;if(push(L,e)coutpush succeedendl;else coutpush failedendl;break;case 2:if(pop(L,e)coutdata e is popendl;else coutpop failedendl;break;case 3:if(GetTop(L,e)couthead data e is popendl;else coutGet failedendl;b
12、reak;.case 4:if(StackEmpty(L)coutstack is not NULLendl;else coutstack is NULLendl;break;case 5:coutthis stack length is StackLength(L)endl;break;/Lstack.h#include#include using namespace std;const int OK=1;const int ERROR=0;typedef int SElemType;typedef int Status;typedef struct LqStack SElemType da
13、ta;struct LqStack*next;LqStack,*Lq_Stack;Status InintStack(Lq_Stack&L);/创建栈 Status push(Lq_Stack&L,SElemType e);/入栈 Status pop(Lq_Stack&L,SElemType&e);/出栈 Status GetTop(Lq_Stack L,SElemType&e);/得到栈顶数据 Status StackEmpty(Lq_Stack L);/判断栈是否为空.int StackLength(Lq_Stack L);/计算栈的长度 Status DestroyStack(Lq_S
14、tack&L);/销毁栈 void Menu(Lq_Stack&L,SElemType e);/输出菜单选择执行的功能 运行结果:(2)应用栈的基本操作,实现数制转换(任意进制);代码部分:/Main.cpp#includeSStack.h int main()int number;coutnumber;conversion(number);return 0;SStack.cpp#includeSStack.h Status InitStack(SStack&S)./创建栈 S.dase=(ElemType*)malloc(STACK_INIT_SIZE*sizeof(ElemType);if
15、(!S.dase)exit(ERROR);S.top=S.dase;S.stacksize=STACK_INIT_SIZE;return OK;Status push(SStack&S,ElemType e)/入栈 if(S.top-S.dase=S.stacksize)/栈满追加空间 S.dase=(ElemType*)realloc(S.dase,(STACK_INIT_SIZE+STACKINCREMENT)*sizeof(ElemType);if(!S.dase)exit(ERROR);S.top=S.dase+STACK_INIT_SIZE;S.stacksize+=STACKINC
16、REMENT;*S.top+=e;return OK;Status pop(SStack&S,ElemType&e)/出栈 if(S.top=S.dase)return ERROR;e=*-S.top;return OK;Status StackEmpty(SStack&S)/判断栈是否为空 if(S.dase=S.top)return ERROR;return OK;.void conversion(int number)/转换为 e 进制并输出 SStack S;int N,e;if(InitStack(S)cout栈创建成功endl;coutN;while(N)push(S,N%numb
17、er);N=N/number;while(StackEmpty(S)pop(S,e);coute;coutendl;/SStack.h#ifndef SSTACK_H#define SSTACK_H#include#include using namespace std;const int STACK_INIT_SIZE=100;const int STACKINCREMENT=10;const int OK=1;.const int ERROR=0;typedef int Status;typedef int ElemType;typedef struct ElemType*dase;Ele
18、mType*top;int stacksize;SStack;Status InitStack(SStack&S);/创建栈 Status push(SStack&S,ElemType e);/入栈 Status push(SStack&S,ElemType&e);/出栈 Status StackEmpty(SStack&S);/判断栈是否为空 void conversion(int number);/转换为 number 进制并输出#endif 运行结果:(3)编程实现队列在两种存储结构中的基本操作(队列的初始化、判队列空、入队列、出队列)。代码部分:A:链式储存:/Main.cpp:#in
19、cludeQNode.h int main()LinkQueue Q;InitQueue(Q);.Menu(Q);DestroyQueue(Q);return 0;/QNode.cpp:#includeQNode.h Status InitQueue(LinkQueue&Q)/构造空队列 Q.front=Q.rear=(QueuePrt)malloc(sizeof(QNode);if(!Q.front)exit(ERROR);Q.front-next=NULL;return OK;Status DestroyQueue(LinkQueue&Q)/销毁队列 Q while(Q.front)Q.r
20、ear=Q.front-next;free(Q.front);Q.front=Q.rear;return OK;Status EnQueue(LinkQueue&Q,QElemType e)/插入元素 a 为 Q 的新的队尾元素 QNode*p;p=(QueuePrt)malloc(sizeof(QNode);if(!p)exit(ERROR);p-data=e;p-next=NULL;Q.rear-next=p;.Q.rear=p;return OK;Status DeQueue(LinkQueue&Q,QElemType&e)/删除 Q 的队头元素,用 e 返回其值 QNode*p;if(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 队列 应用 32362
限制150内