《2022年栈的顺序和链式存储的表示和实现 .pdf》由会员分享,可在线阅读,更多相关《2022年栈的顺序和链式存储的表示和实现 .pdf(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、实验三栈的顺序和链式存储的表示和实现实验目的:1.熟悉栈的特点(先进后出)及栈的基本操作,如入栈、出栈等。2.掌握栈的基本操作在栈的顺序存储结构和链式存储结构上的实现。实验内容:1.栈的顺序表示和实现编写一个程序实现顺序栈的各种基本运算,并在此基础上设计一个主程序,完成如下功能。(1)初始化顺序栈(2)插入一个元素(3)删除栈顶元素(4)取栈顶元素(5)便利顺序栈(6)置空顺序栈#include#include#define MAXNUM 20#define elemtype int/定义顺序栈的存储结构typedef struct elemtype stackMAXNUM;int top;s
2、qstack;/初始化顺序栈void initstack(sqstack*p)if(!p)printf(error);p-top=-1;/入栈void push(sqstack*p,elemtype x)/出栈elemtype pop(sqstack*p)名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 7 页 -/获取栈顶元素elemtype gettop(sqstack*p)elemtype x;if(p-top!=-1)x=p-stackp-top;return x;else printf(Underflow!n);return 0;/遍历顺序栈void outstack(s
3、qstack*p)int 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;名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 7 页 -do printf(n 第一次使用必须初始化!nn);printf(n 主菜单n);printf(n 1 初始化顺序栈n);printf(n 2 插入一个元素n);printf(n 3 删除栈顶元素n);printf(n 4
4、取栈顶元素n);printf(n 5 置空顺序栈n);printf(n 6 结束程序运行n);printf(n-n);printf(请输入您的选择(1,2,3,4,5,6));scanf(%d,&cord);printf(n);switch(cord)case 1:q=(sqstack*)malloc(sizeof(sqstack);initstack(q);outstack(q);break;case 2:printf(请输入要插入的数据元素:a=);scanf(%d,&a);push(q,a);outstack(q);break;case 3:pop(q);outstack(q);brea
5、k;case 4:y=gettop(q);printf(n 栈顶元素为:%dn,y);outstack(q);break;case 5:setempty(q);printf(n 顺序栈被置空!n);名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 7 页 -outstack(q);break;case 6:exit(0);while(cord=6);2.栈的链式表示和实现编写一个程序实现链栈的各种基本运算,并在此基础上设计一个主程序,完成如下功能。(1)初始化链栈(2)入栈(3)出栈(4)取栈顶元素(5)置空链栈(6)遍历链栈参考代码:#include#include#includ
6、e#define null 0 typedef int elemtype;typedef struct stacknode elemtype data;stacknode*next;stacknode;typedef struct stacknode*top;linkstack;/初始化链栈void initstack(linkstack*s)s-top=null;printf(n 已经初始化链栈!n);/链栈置空void setempty(linkstack*s)s-top=null;名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 7 页 -printf(n 链栈被置空!n);
7、/入栈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(linkstack*s)printf(n 链栈中的数据位:n);printf(=n);stacknode*p;p=s-top;while(p!=null)printf(%dn,p-data);p=p-next;printf(=n);/主函
8、数void main()printf(=链栈操作=n);int i,m,n,a;名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 7 页 -linkstack*s;s=(linkstack*)malloc(sizeof(linkstack);int cord;do printf(n 第一次使用必须初始化!nn);printf(n 主菜单n);printf(n 1 初始化链栈n);printf(n 2 入栈n);printf(n 3 出栈n);printf(n 4 取栈顶元素n);printf(n 5 置空链栈n);printf(n 6 结束程序运行n);printf(n-n);pr
9、intf(请输入您的选择(1,2,3,4,5,6));scanf(%d,&cord);printf(n);switch(cord)case 1:initstack(s);disp(s);break;case 2:printf(输入将要压入链栈的数据的个数:n=);scanf(%d,&n);printf(依次将%d 个数据压入链栈:n,n);for(i=1;i=n;i+)scanf(%d,&a);pushlstack(s,a);disp(s);break;case 3:printf(n 出栈操作开始!n);printf(输入将要出栈的数据个数:m=);scanf(%d,&m);for(i=1;i=m;i+)printf(n 第%d 次出栈的数据是:%dn,i,poplstack(s);break;名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 7 页 -case 4:printf(nn链栈的栈顶元素为:%dnn,stacktop(s);break;case 5:setempty(s);disp(s);break;case 6:exit(0);while(cord=6);实验总结:名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 7 页 -