栈的顺序和链式存储的表示和实现

栈的顺序和链式存储的表示和实现

ID:26853327

大小:65.06 KB

页数:7页

时间:2018-11-29

上传者:U-25923
栈的顺序和链式存储的表示和实现_第1页
栈的顺序和链式存储的表示和实现_第2页
栈的顺序和链式存储的表示和实现_第3页
栈的顺序和链式存储的表示和实现_第4页
栈的顺序和链式存储的表示和实现_第5页
资源描述:

《栈的顺序和链式存储的表示和实现》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

实验三栈的顺序和链式存储的表示和实现实验目的:1.熟悉栈的特点(先进后出)及栈的基本操作,如入栈、出栈等。2.掌握栈的基本操作在栈的顺序存储结构和链式存储结构上的实现。实验内容:1.栈的顺序表示和实现编写一个程序实现顺序栈的各种基本运算,并在此基础上设计一个主程序,完成如下功能。(1)初始化顺序栈(2)插入一个元素(3)删除栈顶元素(4)取栈顶元素(5)便利顺序栈(6)置空顺序栈#include#include#defineMAXNUM20#defineelemtypeint//定义顺序栈的存储结构typedefstruct{elemtypestack[MAXNUM];inttop;}sqstack;//初始化顺序栈voidinitstack(sqstack*p){if(!p)printf("error");p->top=-1;}//入栈voidpush(sqstack*p,elemtypex){}//出栈elemtypepop(sqstack*p){} //获取栈顶元素elemtypegettop(sqstack*p){elemtypex;if(p->top!=-1){x=p->stack[p->top];returnx;}else{printf("Underflow! ");return0;}}//遍历顺序栈voidoutstack(sqstack*p){inti;printf(" ");if(p->top<0)printf("这是一个空栈! ");for(i=p->top;i>=0;i--)printf("第%d个数据元素是:%6d ",i,p->stack[i]);}//置空顺序栈voidsetempty(sqstack*p){}//主函数main(){sqstack*q;inty,cord;elemtypea; do{printf(" 第一次使用必须初始化! ");printf(" 主菜单 ");printf(" 1初始化顺序栈 ");printf(" 2插入一个元素 ");printf(" 3删除栈顶元素 ");printf(" 4取栈顶元素 ");printf(" 5置空顺序栈 ");printf(" 6结束程序运行 ");printf(" ---------------------------------- ");printf("请输入您的选择(1,2,3,4,5,6)");scanf("%d",&cord);printf(" ");switch(cord){case1:{q=(sqstack*)malloc(sizeof(sqstack));initstack(q);outstack(q);}break;case2:{printf("请输入要插入的数据元素:a=");scanf("%d",&a);push(q,a);outstack(q);}break;case3:{pop(q);outstack(q);}break;case4:{y=gettop(q);printf(" 栈顶元素为:%d ",y);outstack(q);}break;case5:{setempty(q);printf(" 顺序栈被置空! "); outstack(q);}break;case6:exit(0);}}while(cord<=6);}1.栈的链式表示和实现编写一个程序实现链栈的各种基本运算,并在此基础上设计一个主程序,完成如下功能。(1)初始化链栈(2)入栈(3)出栈(4)取栈顶元素(5)置空链栈(6)遍历链栈参考代码:#include#include#include#definenull0typedefintelemtype;typedefstructstacknode{elemtypedata;stacknode*next;}stacknode;typedefstruct{stacknode*top;}linkstack;//初始化链栈voidinitstack(linkstack*s){s->top=null;printf(" 已经初始化链栈! ");}//链栈置空voidsetempty(linkstack*s){s->top=null; printf(" 链栈被置空! ");}//入栈voidpushlstack(linkstack*s,elemtypex){}//出栈elemtypepoplstack(linkstack*s){}//取栈顶元素elemtypestacktop(linkstack*s){if(s->top==0){printf(" 链栈空 ");exit(-1);}returns->top->data;}//遍历链栈voiddisp(linkstack*s){printf(" 链栈中的数据位: ");printf("======================================= ");stacknode*p;p=s->top;while(p!=null){printf("%d ",p->data);p=p->next;}printf("===================================== ");}//主函数voidmain(){printf("==============链栈操作================ ");inti,m,n,a; linkstack*s;s=(linkstack*)malloc(sizeof(linkstack));intcord;do{printf(" 第一次使用必须初始化! ");printf(" 主菜单 ");printf(" 1初始化链栈 ");printf(" 2入栈 ");printf(" 3出栈 ");printf(" 4取栈顶元素 ");printf(" 5置空链栈 ");printf(" 6结束程序运行 ");printf(" ---------------------------------- ");printf("请输入您的选择(1,2,3,4,5,6)");scanf("%d",&cord);printf(" ");switch(cord){case1:{initstack(s);disp(s);}break;case2:{printf("输入将要压入链栈的数据的个数:n=");scanf("%d",&n);printf("依次将%d个数据压入链栈: ",n);for(i=1;i<=n;i++){scanf("%d",&a);pushlstack(s,a);}disp(s);}break;case3:{printf(" 出栈操作开始! ");printf("输入将要出栈的数据个数:m=");scanf("%d",&m);for(i=1;i<=m;i++){printf(" 第%d次出栈的数据是:%d ",i,poplstack(s));}break;} case4:{printf(" 链栈的栈顶元素为:%d ",stacktop(s));}break;case5:{setempty(s);disp(s);}break;case6:exit(0);}}while(cord<=6);}实验总结:

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭