收藏 分享(赏)

武汉理工数据结构实验2 栈和队列基本操作和应用.doc

上传人:tangtianxu2 文档编号:2881605 上传时间:2018-09-29 格式:DOC 页数:12 大小:61.50KB
下载 相关 举报
武汉理工数据结构实验2  栈和队列基本操作和应用.doc_第1页
第1页 / 共12页
武汉理工数据结构实验2  栈和队列基本操作和应用.doc_第2页
第2页 / 共12页
武汉理工数据结构实验2  栈和队列基本操作和应用.doc_第3页
第3页 / 共12页
武汉理工数据结构实验2  栈和队列基本操作和应用.doc_第4页
第4页 / 共12页
武汉理工数据结构实验2  栈和队列基本操作和应用.doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

1、实验 2 栈和队列的基本操作和应用1 实验目的(1) 熟练掌握顺序栈的基本操作。(2) 掌握顺序栈的应用。(3) 掌握顺序循环队列的基本操作。(4) 掌握链式队列的基本操作。2 实验内容(1) 设计一个顺序栈的基本操作的演示程序;(2) 利用顺序栈,进行整数的不同进制之间的转换;(3) 设计一个顺序循环队列的基本操作演示程序;(4) 设计一个链式队列的基本操作演示程序。【基本要求】I. 实验内容(1)的基本要求:编写一个程序,将一个顺序栈的元素依次取出,并打印其元素值。II. 实验内容(2)的基本要求:编写一个程序,将一个非负的十进制整数转换成二进制。III. 实验内容(3)的基本要求:编写一

2、个程序,将一个顺序队列的元素依次取出,并打印其元素值。IV. 实验内容(4)的基本要求:编写一个程序,将一个链式队列的元素依次取出,并打印其元素值。 【测试数据】自定3 实验结果按照学校实验格式要求撰写实验报告,内容主要包括 1)实验目的;2)实验内容;3)实验环境和方法;4)实验过程描述;5)实验心得体会参考程序如下:实验内容(1)参考程序/*sqStack.h 文件 */#define INIT_SIZE 100#define INCREMENT 10typedef int ElemType;/typedef char ElemType;typedef struct SqStack Ele

3、mType *base;ElemType *top;int stacksize;SqStack;enum StatusOK,ERROR,OVERFLOW;/*sqStackOp.h 文件 */#include “sqStack.h“Status InitStack(SqStack Status GetTop(SqStack S,ElemType Status Push(SqStack Status Pop(SqStack bool StackEmpty(SqStack /*sqStackOp.cpp 文件 */#include #include #include “sqStackOp.h“St

4、atus InitStack(SqStack if(! S.base) exit(OVERFLOW); /存储分配失败S.top=S.base; S.stacksize=INIT_SIZE;return OK; /InitStackStatus GetTop(SqStack S,ElemType e=*(S.top-1);return OK; /GetTopStatus Push(SqStack if(!S.base)exit(OVERFLOW); /存储分配失败S.top=S.base+S.stacksize;S.stacksize+=INCREMENT; *S.top+=e;return

5、OK; /PushStatus Pop(SqStack e=*(-S.top);return OK; /Push/判断栈是否为空bool StackEmpty(SqStack elsereturn false;/*main.cpp 文件 */#include #include #include “sqStackOp.h“void main()printf(“Hellow stack n“);SqStack S; /定义顺序栈 Sif(OK != InitStack(S) printf(“顺序栈初始化出错,退出n“);exit(-1);Push(S, 1);Push(S,2);Push(S,3)

6、;int e;Pop(S, e);printf(“出栈元素 = %d n“,e);Push(S,4);Push(S,5);while(!StackEmpty(S)Pop(S, e);printf(“出栈元素 = %d n“,e);/*SqStack S; char x,y;InitStack(S); x=c;y=k;Push(S,x); Push(S,a); Push(S,y);Pop(S,x); Push(S,t); Push(S,x);Pop(S,x); Push(S,s);while(!StackEmpty(S) Pop(S,y);printf(“%c “,y); ;printf(“%c

7、 “,x);*/getchar();实验内容(2)参考程序/*sqStack.h 文件 */#define INIT_SIZE 100#define INCREMENT 10typedef int ElemType;typedef struct SqStack ElemType *base;ElemType *top;int stacksize;SqStack;enum StatusOK,ERROR,OVERFLOW;/*sqStackOp.h 文件 */#include “sqStack.h“Status InitStack(SqStack Status GetTop(SqStack S,E

8、lemType Status Push(SqStack Status Pop(SqStack bool StackEmpty(SqStack /*sqStackOp.cpp 文件 */#include #include #include “sqStackOp.h“Status InitStack(SqStack if(! S.base) exit(OVERFLOW); /存储分配失败S.top=S.base; S.stacksize=INIT_SIZE;return OK; /InitStackStatus GetTop(SqStack S,ElemType e=*(S.top-1);retu

9、rn OK; /GetTopStatus Push(SqStack if(!S.base)exit(OVERFLOW); /存储分配失败S.top=S.base+S.stacksize;S.stacksize+=INCREMENT; *S.top+=e;return OK; /PushStatus Pop(SqStack e=*(-S.top);return OK; /Push/判断栈是否为空bool StackEmpty(SqStack elsereturn false;/*main.cpp 文件 */#include #include #include “sqStackOp.h“void

10、main()SqStack s;int x;InitStack(s);scanf(“%d“, /%d-十进制输入;%O- 八进制输入; %x-十六进制输入/修改这里输入进制和下面整除和余数计算,就可以获得其他进制的转换while(x!=0)Push(s,x%8); x=x/8;while(!StackEmpty(s)Pop(s,x); printf(“%d “,x);printf(“n“);getchar();实验内容(3)参考程序/*sqQueue.h 文件*/#define MAXQSIZE 100typedef int QElemType;typedef struct SqQueue Q

11、ElemType *base;int front;int rear;SqQueue;enum StatusOK,ERROR,OVERFLOW;/*sqQueueOp.h 文件*/#include “sqQueue.h“Status InitQueue (SqQueue Status EnQueue (SqQueue Status DeQueue (SqQueue bool QueueEmpty(SqQueue int QueueLength(SqQueue Q);/*sqQueueOp.cpp 文件*/#include #include #include “sqQueueOp.h“Status

12、 InitQueue (SqQueue if (!Q.base) exit (OVERFLOW); / 存储分配失败Q.front = Q.rear = 0;return OK;Status EnQueue (SqQueue /队列满Q.baseQ.rear = e;Q.rear = (Q.rear+1) % MAXQSIZE;return OK;Status DeQueue (SqQueue 否则返回 ERRORif (Q.front = Q.rear) return ERROR;e = Q.baseQ.front;Q.front = (Q.front+1) % MAXQSIZE;retur

13、n OK;/判断队列是否为空bool QueueEmpty(SqQueue elsereturn false;/计算循环队列长度int QueueLength(SqQueue Q)return (Q.rear - Q.front + MAXQSIZE) % MAXQSIZE;/*main.cpp 文件 */#include #include #include “sqQueueOp.h“void main()printf(“Hello Queue n“);SqQueue Q; /定义顺序队列 QQElemType e;if(OK != InitQueue(Q) printf(“顺序队列初始化出错

14、,退出n“);exit(-1);EnQueue(Q,1);EnQueue(Q,3);EnQueue(Q,5);EnQueue(Q,7);printf(“当前队列长度 = %d n“,QueueLength(Q);DeQueue(Q,e);printf(“队首元素%d 出队,当前队列长度=%dn“,e,QueueLength(Q);EnQueue(Q,9);EnQueue(Q,11);while(!QueueEmpty(Q)DeQueue(Q,e);printf(“队首元素%d 出队,当前队列长度=%dn“,e,QueueLength(Q);getchar();实验内容(4)参考程序/*link

15、Queue.h 文件*/typedef int QElemType;typedef struct QNode / 结点类型QElemType data;struct QNode *next; QNode, *QueuePtr;typedef struct / 链队列类型QueuePtr front; / 队头指针QueuePtr rear; / 队尾指针 LinkQueue;enum StatusOK,ERROR,OVERFLOW;/*linkQueueOp.h 文件*/#include “linkQueue.h“Status InitQueue (LinkQueue Status EnQue

16、ue (LinkQueue Status DeQueue (LinkQueue bool QueueEmpty(LinkQueue /*linkQueueOp.cpp 文件*/#include #include #include “linkQueueOp.h“Status InitQueue (LinkQueue if (!Q.front) exit (OVERFLOW); /存储分配失败Q.front-next = NULL;return OK;Status EnQueue (LinkQueue if (!p) exit (OVERFLOW); /存储分配失败p-data = e; p-ne

17、xt = NULL;Q.rear-next = p; Q.rear = p;return OK;Status DeQueue (LinkQueue QueuePtr p = Q.front-next; e = p-data;Q.front-next = p-next;if (Q.rear = p) Q.rear = Q.front;free (p); return OK;/判断队列是否为空bool QueueEmpty(LinkQueue elsereturn false;/*main.cpp 文件 */#include #include #include “linkQueueOp.h“voi

18、d main()printf(“Hello LinkQueue n“);LinkQueue Q; /定义顺序队列 QQElemType e;if(OK != InitQueue(Q) printf(“顺序队列初始化出错,退出n“);exit(-1);EnQueue(Q,1);EnQueue(Q,3);EnQueue(Q,5);EnQueue(Q,7);DeQueue(Q,e);printf(“队首元素%d 出队,n“,e);EnQueue(Q,9);EnQueue(Q,11);while(!QueueEmpty(Q)DeQueue(Q,e);printf(“队首元素%d 出队,n“,e);getchar();

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

当前位置:首页 > 高等教育 > 专业基础教材

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报