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();