实验报告内容:
一、实验目的、要求:
(1)熟练掌握栈的特点(先进后出FILO)及基本操作,如入栈、出栈等,栈的顺序存储结构和链式存储结构,以便在实际问题背景下灵活应用。
(2)编写适当的主函数和相关函数,使实验题目运行出正确结果。
(3)当场编程、调试、编译。
(4)程序具有一定的健壮性、可读性,尽量简洁。
(5)程序运行完成后分别存盘,上交实验报告,要求写出实验体会
二、实验内容:
(1)实验题目
(2)主要函数的算法设计思想
(3)程序清单
(3)测试数据、实验结果及结论
(4)实验体会(实验中存在的问题、进一步的想法等)
1、第一道题:
(1)实验题目
编程实现顺序栈的各种基本运算,并在此基础上设计一个主程序,完成如下功能:
1)初始化顺序栈;
2)给定一个元素,将此元素压入此栈中;
3)将栈顶一个元素弹出此栈。
(2)主要函数的设计思想
1)进栈函数的设计思想
Status Push (SqStack &S, ElemType e) {if(S.top-S.base>=S.stacksize){S.base=(ElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(ElemType));if(!S.base) exit(OVERFLOW);S.top=S.base+S.stacksize;S.stacksize+=STACKINCREMENT;}*S.top++=e;return OK;}
2)出栈函数的设计思想
Status Pop(SqStack &S,SElemType &e){if(S.top==S.base) return ERROR;e=*--S.top;return OK;}
(3)程序清单
#include <stdio.h>#include <stdlib.h>#define OK 1#define ERROR 0#define OVERFLOW -2typedef int SElemType;typedef int Status;//----- 栈的顺序存储表示 -----#define STACK_INIT_SIZE 100 // 存储空间的初始分配量#define STACKINCREMENT 10 // 存储空间的分配增量typedef struct {SElemType *base; SElemType *top; int stacksize; } SqStack;// 构造一个空栈SStatus InitStack(SqStack &S){S.base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType));if(!S.base) exit (OVERFLOW);S.top = S.base;S.stacksize = STACK_INIT_SIZE;return OK;}// 判栈S是否为空栈Status StackEmpty(SqStack S){if (S.top==S.base) return OK;else return ERROR;}//入栈函数Status Push (SqStack &S, SElemType e) {if(S.top-S.base>=S.stacksize){S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));if(!S.base)exit(OVERFLOW);S.top=S.base+S.stacksize;S.stacksize+=STACKINCREMENT;}*S.top++=e;return OK;}//Push//出栈函数Status Pop (SqStack &S, SElemType &e) {if(S.top==S.base) return ERROR;e=*--S.top;return OK;}//Pop//输出顺序栈函数void OutStack(SqStack S){int *p;if(S.top == S.base){printf("这是一个空栈!");}elsefor(p= S.top-1; p>= S.base;p--)printf("%6d", *p);printf("\n"); }//主函数int main(){SqStack s;int cord; SElemType a;printf("第一次使用必须初始化!\n");do{printf("\n 主菜单\n");printf(" 1 初始化顺序栈 ");printf(" 2 插入一个元素 ");printf(" 3 删除栈顶元素 ");printf(" 4 结束程序运行 ");printf("\n------------------------------------------------------------------------------\n");printf("请输入您的选择( 1, 2, 3, 4)");scanf("%d",&cord);printf("\n");switch(cord){case 1:InitStack(s);OutStack(s);break;case 2:printf("请输入要插入的数据元素:a=");scanf("%d",&a);Push(s,a);printf("%d 进栈之后的栈:",a);OutStack(s);break;case 3:Pop(s,a);printf("栈顶元素 %d 出栈之后的栈:",a);OutStack(s);break;case 4:exit(0);}}while (cord<=4);}
(4)测试数据、实验结果及结论