1、实验三 栈的顺序和链式存储的表示和实现实验目的:1. 熟悉栈的特点(先进后出)及栈的基本操作,如入栈、出栈等。2. 掌握栈的基本操作在栈的顺序存储结构和链式存储结构上的实现。实验内容:1. 栈的顺序表示和实现编写一个程序实现顺序栈的各种基本运算,并在此基础上设计一个主程序,完成如下功能。(1 ) 初始化顺序栈(2 ) 插入一个元素(3 ) 删除栈顶元素(4 ) 取栈顶元素(5 ) 便利顺序栈(6 ) 置空顺序栈#include #include#define MAXNUM 20#define elemtype int/定义顺序栈的存储结构typedef struct elemtype stac
2、kMAXNUM;int top;sqstack;/初始化顺序栈void initstack(sqstack *p)if(!p)printf(“error“);p-top=-1;/入栈void push(sqstack *p,elemtype x)/出栈elemtype pop(sqstack *p)/获取栈顶元素elemtype gettop(sqstack *p)elemtype x;if(p-top!=-1)x=p-stackp-top;return x;elseprintf(“Underflow!n“);return 0;/遍历顺序栈void outstack(sqstack *p)in
3、t i;printf(“n“);if(p-toptop;i=0;i-)printf(“第%d 个数据元素是:%6dn“,i,p-stacki);/置空顺序栈void setempty(sqstack *p)/主函数main()sqstack *q;int y,cord;elemtype a;doprintf(“n 第一次使用必须初始化!nn“);printf(“n 主菜单 n“);printf(“n 1 初始化顺序栈 n“);printf(“n 2 插入一个元素 n“);printf(“n 3 删除栈顶元素 n“);printf(“n 4 取栈顶元素 n“);printf(“n 5 置空顺序栈
4、 n“);printf(“n 6 结束程序运行 n“);printf(“n-n“);printf(“请输入您的选择(1,2,3,4,5,6)“);scanf(“%d“,printf(“n“);switch(cord)case 1:q=(sqstack *)malloc(sizeof(sqstack);initstack(q);outstack(q);break;case 2:printf(“请输入要插入的数据元素:a=“);scanf(“%d“,push(q,a);outstack(q);break;case 3:pop(q);outstack(q);break;case 4:y=gettop
5、(q);printf(“n 栈顶元素为: %dn“,y);outstack(q);break;case 5:setempty(q);printf(“n 顺序栈被置空! n“);outstack(q);break;case 6:exit(0);while(cord#include#include#define null 0typedef int elemtype;typedef struct stacknodeelemtype data;stacknode *next;stacknode;typedef structstacknode *top;linkstack;/初始化链栈void init
6、stack(linkstack *s)s-top=null;printf(“n 已经初始化链栈!n“);/链栈置空void setempty(linkstack *s)s-top=null;printf(“n 链栈被置空!n“);/入栈void pushlstack(linkstack *s,elemtype x)/出栈elemtype poplstack(linkstack *s)/取栈顶元素elemtype stacktop(linkstack *s)if(s-top=0)printf(“n 链栈空n“);exit(-1);return s-top-data;/遍历链栈void disp(
7、linkstack *s)printf(“n 链栈中的数据位:n“);printf(“=n“);stacknode *p;p=s-top;while(p!=null)printf(“%dn“,p-data);p=p-next;printf(“=n“);/主函数void main()printf(“=链栈操作=n“);int i,m,n,a;linkstack *s;s=(linkstack *)malloc (sizeof(linkstack);int cord;doprintf(“n 第一次使用必须初始化!nn“);printf(“n 主菜单 n“);printf(“n 1 初始化链栈 n“
8、);printf(“n 2 入栈 n“);printf(“n 3 出栈 n“);printf(“n 4 取栈顶元素 n“);printf(“n 5 置空链栈 n“);printf(“n 6 结束程序运行 n“);printf(“n-n“);printf(“请输入您的选择(1,2,3,4,5,6)“);scanf(“%d“,printf(“n“);switch(cord)case 1: initstack(s);disp(s);break;case 2:printf(“输入将要压入链栈的数据的个数:n=“);scanf(“%d“,printf(“依次将%d 个数据压入链栈:n“,n);for(i=1;i=n;i+)scanf(“%d“,pushlstack(s,a);disp(s);break;case 3:printf(“n 出栈操作开始!n“);printf(“输入将要出栈的数据个数:m=“);scanf(“%d“,for(i=1;i=m;i+)printf(“n 第%d 次出栈的数据是:%dn“,i,poplstack(s);break;case 4:printf(“nn 链栈的栈顶元素为:%dnn“,stacktop(s);break;case 5:setempty(s);disp(s);break;case 6:exit(0);while(cord=6);实验总结: