1、算法与数据结构实验(上机)报告班级学号 16 姓名 练清 实验日期 2011.5.3 任课教师 熊保平 实验名称 栈 验证型实验目的及要求:1.掌握栈的顺序表示和实现 2. 掌握栈的链式表示和实现 实验内容:1. 编写一个程序实现顺序栈的各种基本运算。 2. 编写一个程序实现链栈的各种基本运算3.源程序:/*-顺序栈-*/#include typedef char ElemType; #define MAXLEN 100 typedef struct ElemType dataMAXLEN; int top; SeqStack; void InitStack( SeqStack *S ) S-
2、top=-1; /*初始的顺序栈为空*/ int EmptyStack(SeqStack *S) if(S-top=-1) /*栈为空*/ return 1; else return 0; int Push(SeqStack *S,ElemType x) if(S-top=MAXLEN-1) /*栈为满*/ printf(“栈满溢出!“); return 0; /*栈满不能入栈*/ else /*栈不为满*/ S-top+; S-dataS-top=x; return 1; int Pop(SeqStack *S,ElemType *x) if(EmptyStack(S) printf(“栈空
3、!“); return 0; /*栈空不能出栈*/ else /*栈不为空*/ *x=S-dataS-top; S-top-; return 1; int GetTop(SeqStack *S,ElemType *x) if(EmptyStack(S) printf(“栈空!“); return 0; else /*栈不为空*/ *x=S-dataS-top; return 1; void main() SeqStack S;ElemType x; InitStack( printf(“依次进栈元素为:n“); printf(“r 元素进栈n“); Push( printf(“a 元素进栈n“
4、); Push( printf(“h 元素进栈n“); Push( printf(“c 元素进栈n“); Push( GetTop( printf(“栈顶元素为:%cn“,x); printf(“出栈序列为:“); while(!EmptyStack( printf(“%c“,x); printf(“n“); /*-链栈-*/#include #include typedef char ElemType; typedef struct node ElemType data; struct node *next; LinkStack; LinkStack *InitStack() LinkSta
5、ck *S; S=NULL; return S; /*初始化栈为空*/ int EmptyStack(LinkStack *S) if(S=NULL) /*栈为空*/ return 1; else return 0; LinkStack *Push(LinkStack *S,ElemType x) LinkStack *p; p=(LinkStack*)malloc(sizeof(LinkStack);p-data=x; p-next=S; S=p; return S; LinkStack *Pop(LinkStack *S,ElemType *x) LinkStack *p; if(Empt
6、yStack(S) /*调用判空函数 EmptyStack(S),判断栈是否为空*/ printf(“栈空!“); return NULL; /*栈空不能出栈*/ else /*栈不为空*/ *x=S-data; /*栈顶元素取出赋给 x*/ p=S; /*p 结点指向原栈顶 S*/ S=S-next; /*原栈顶 S 指向其下一个结点*/free(p); /*释放原栈顶空间*/ return S; /*返回栈顶 S*/ int GetTop(LinkStack *S,ElemType *x) if(EmptyStack(S) /*调用判空函数 EmptyStack(S),判断栈是否为空*/
7、printf(“栈空!“); return 0; else /*栈不为空*/ *x=S-data; /*栈顶元素赋给变量 x*/ return 1; void main() LinkStack *S; ElemType x; S=InitStack(); printf(“依次进栈元素为:n“); printf(“r 元素进栈n“); S=Push(S,r); printf(“a 元素进栈n“); S=Push(S,a); printf(“h 元素进栈n“); S=Push(S,h); printf(“c 元素进栈n“); S=Push(S,c); GetTop(S, printf(“栈顶元素为
8、:%cn“,x); printf(“出栈序列为:“); while(!EmptyStack(S) S=Pop(S, printf(“%c“,x); printf(“n“); 结果: 线性栈:依次进栈元素为:r 元素进栈a 元素进栈h 元素进栈c 元素进栈栈顶元素为:c出栈序列为:char链栈:依次进栈元素为:r 元素进栈a 元素进栈h 元素进栈c 元素进栈栈顶元素为:c出栈序列为:char 请写出实验内容的操作步骤:1.初始化顺序栈 2. 插入元素 3. 删除栈顶元素操作步骤(续):4. 取栈顶元素 5. 遍历顺序栈 6. 置空顺序栈实验中遇到的问题和总结;教师批语与成绩评定:评阅教师: 年 月 日