资源描述:
《数据结构栈和队列的基本操作及应用实验报告》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实验日期2010.4.26教师签字成绩实验报告[实验名称]第三章栈和队列的基本操作及应用【实验目的】(1)熟悉栈的特点(先进后出)及栈的基本操作,如入栈、出栈等,掌握栈的基本操作在栈的顺序存储结构和链式存储结构上的实现;(2)熟悉队列的特点(先进先出)及队列的基本操作,如入队、出队等,掌握队列的基本操作在队列的顺序存储结构和链式存储结构上的实现。【实验内容】1.链栈的基本操作(链栈的初始化、进栈、出栈以及取栈顶的值)#include"stdio.h"#include"malloc.h"#include"stdlib.h"typedefintElemtype;typede
2、fstructstacknode{Elemtypedata;stacknode*next;JStackNode;typedefstruct{stacknode*top;//栈顶指针}LinkStack;/*初始化链栈*/voidInitStack(LinkStack*s){s->top=NULL;printf("已经初始化链栈!n);}/*链栈置空*/voidsetEmpty(LinkStack*s){s->top=NULL;printf(H链栈被置空!n);}/*入栈*/voidpushLstack(LinkStack*s,Elemtypex){Sta
3、ckNode*p;p=(StackNode*)malloc(sizeof(StackNode));〃建立一个节点。p->data=x;p->next=s->top;〃由于是在栈顶pushLstack,所以要指向栈顶。s->top=p;〃插入}/*出栈*/ElemtypepopLstack(LinkStack*s){Elemtypex;StackNode*p;p=s->top;〃指向栈顶if(s->top==()){printf("栈空,不能出栈!H);exit(-l);}x=p・>data;s->top=p->next;〃当前的栈顶指向原栈的nextfree(p
4、);〃释放returnx;}/*取栈顶元索*/ElemtypeStackTop(LinkStack*s){if(s->top==0){printf("链栈空”);exit(-l);}returns->top・>data;}/*遍历链栈*/voidDisp(LinkStack*s){printf(H链栈中的数据为:n);printf(n=======================================n);StackNode*p;p=s->top;while(p!=NULL){printf("%d",p->data);p=p->next
5、;}printf(H=======================================n);}voidmain(){printf(”=========链栈操作================H);inti5m,n,a;LinkStack*s;s=(LinkStack*)malloc(sizeof(LinkStack));intcord;do{printfC'Xn");printf(”第一次使用必须初始化!n);printf(nn);printf(H主菜单W);printf("1初始化链栈n);printf(H2入栈H)
6、;printf(H3出栈n);printf(H4取栈顶元素n);printf(H5置空链栈W);printf("6结束程序运行n);printf("H);printf(H请输入您的选择(1,2,3,4,5,6)”);scanf(n%d",&cord);printfC,H);switch(cord){case1:{InitStack(s);Disp(s);}break;case2:{printf("输入将要压入链栈的数据的个数:n=");scanf("%d",&n);printf(”依次将%<1个数据压入链檢u,n);for(i
7、=l;i<=n;i++){scanf(”%d”,&a);pushLstack(s,a);}Disp(s);{break;case3:{printf(M出栈操作开始!“);printf(”输入将要出栈的数据个数:m=H);scanf("%d",&m);for(i=l;iv=m;i++){printf("第%<1次出栈的数据是:%dn,i,popLstack(s));}Disp(s);}break;case4:{printf("链栈的栈顶元索为:%dM,StackTop(s));printfC'Vn");{break;