1、实验二栈和队列、 实验目的1、 了解栈和队列的特性2、 掌握栈的顺序表示和实现3、 掌握栈的链式表示和实现4、 掌握队列的顺序表示和实现5、 掌握队列的链式表示和实现6、 掌握栈和队列在实际问题中的应用二、 实验要求1、 认真阅读和掌握数据结构课本中实验相关程序的算法2、 尽可能少的改动,使之成为可以运行的 C 程序3、 保存和打印程序的运行结果,并结合程序进行分析4、 你的实验体会三、 实验内容实验 2.1 栈的顺序表示和实现编写一个程序实现顺序栈的各种基本运算,并在此基础上设计一个主程序,完成如下功能:1.建立栈:构造一个空栈,并插入元素2.入栈,插入元素3.出栈,删除栈顶元素4.取栈顶元
2、素5.输出显示栈内元素,从栈底到栈顶参考程序清单#include /*程序中使用了动态存储分配函数,ANSI 建议在 stdlib.h 头文件内包含有关信息*/*也有些编辑系统要求用 malloc.h ,参见 C 程序设计附录 p377 动态存储分配函数*/*但是用 WinTc 居然可以省略这些文件!史守正 2011*/*包含数据结构的预定义常量和类型 P10 */#include “Datahead.h“/*文件名大于 8 位出错*/*定义元素类型为整数类型*/typedef int SElemType;/*栈的顺序存储表示*/#define STACK_INIT_SIZE 4 /* p46
3、 */#define STACKINCREMENT 1typedef structSElemType *base;SElemType *top;int stacksize;SqStack;/*函数申明*/Status InitStack(SqStack *L); /* p47 */Status GetTop(SqStack S,SElemType *e);Status Push(SqStack *L, SElemType e); /* 进栈,插入 */Status Pop(SqStack *L, SElemType *e); /* 出栈,删除*/void Out_Stack(SqStack L
4、); /*补充,输出打印栈*/*主函数*/void main()int i,k,loc; /* k ,菜单控制变量*/SElemType e,x;char ch;SqStack L;SqStack *p;system(“graftabl 936“);/*调用 MS_DOS 中文支持*/p=/*p 指向 L*/doprintf(“n=实验二:栈和队列 =“);printf(“n 1.建立栈:构造一个空栈,并插入元素“);printf(“n 2.入栈,插入元素“);printf(“n 3.出栈,删除元素“);printf(“n 4.取栈顶元素“);printf(“n 5.输出显示栈内元素,从栈底到
5、栈顶“);printf(“n 0.结束程序运行“);printf(“n=“);printf(“n 请输入您的选择(1,2,3,4,0)n“);scanf(“%d“,switch(k)case 1:loc=InitStack(p);printf(“n 请输入入栈元素个数,并依次输入整数类型的元素值“);scanf(“%d“,for(i=1;ibase = (SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType);if (!S-base) exit(OVERFLOW); /* 存储分配失败 */S-top = S-base;S-stacksize
6、= STACK_INIT_SIZE; /* 初始存储容量 */return OK; /* InitStack */Status GetTop(SqStack S, SElemType *e) /* p47 */* 此处要求自己参考课本补充代码*/return OK; /* GetTop */Status Push(SqStack *S, SElemType e) /* P47 */if (S-top-S-base = S-stacksize) /* 当前存储空间已满,增加容量 */S-base = (SElemType *)realloc(S-base,(S-stacksize+STACKIN
7、CREMENT)*sizeof (SElemType);if (!S-base) exit(OVERFLOW); /* 存储分配失败 */S-top = S-base+S-stacksize;S-stacksize += STACKINCREMENT; /* 增加存储容量 */*S-top+ = e; /* 请同学注释此句,或分拆*/return OK; /* Push */void Out_Stack(SqStack L)int *i;printf(“n 当前栈内元素从栈底到栈顶为:“);for(i=L.base;iL.top;i+) printf(“%10d“,*i);Status Pop
8、(SqStack *S, SElemType *e) /* p47 */* 此处要求自己参考课本补充代码*/return OK; /* Pop */实验 2.2 栈的链式表示和实现编写一个程序实现链栈的各种基本运算,并在此基础上设计一个主程序,完成如下功能:(1) 初始化栈(2) 链栈置空(3) 入栈(4) 出栈(5) 取栈顶元素(6) 遍历链栈实验 2.3 队列的顺序表示和实现编写一个程序实现顺序队列的各种基本运算,并在此基础上设计一个主程序,完成如下功能:(1) 初始化队列(2) 建立顺序队列(3) 入队(4) 出队(5) 判断队列是否为空(6) 取队列头元素(7) 遍历队列实验 2.4 队列的链式表示和实现编写一个程序实现链队列的各种基本运算,并在此基础上设计一个主程序,完成如下功能:(1) 初始化并建立链队列(2) 入链队列(3) 出链队列(4) 遍历链队列四、 程序调试和结果输出五、 实验小结六、七、八、九、十、十一、十二、十三、十四、