实验4、顺序栈的基本操作及应用
要求:
(1)实验目的
通过该实验,让学生掌握栈的相关基本概念,认识栈是插入和删除集中在一端进行的线性结构,掌握栈的“先入后出”操作特点。栈在进行各类操作时,栈底指针固定不动,掌握栈空、栈满的判断条件。
(2)实验内容
用顺序存储结构,实现教材定义的栈的基本操作,提供数制转换功能,将输入的十进制整数转换成二进制、八进制或十六进制。
(3)参考界面
菜单中包括以下功能:
1.初始化栈,2.销毁栈,3.清空栈,4.栈判空,5.求栈长度,6.获取栈顶元素,7.插入一个 元素,8.删除一个元素,9输出所有元素,10进制转换。
要求:自定义的函数中不允许出现提示语和输出语句。
(4)验收/测试用例
通过菜单调用各个操作,测试点:
没有初始化前进行其他操作,程序是否能控制住;
初始化一个栈;
判栈空,屏幕显示栈为空;
3个数入栈, 2、4、6;
栈长度,屏幕输出3;
取栈顶元素,再判栈空,然后再判栈长度。让学生知道取栈顶元素不改变栈中的内容,栈顶指针不发生改变;
出栈,再判栈长度和输出栈中内容;(多次出栈,直到栈为空;再出栈,是否提示栈为空)
销毁栈,再做其他操作,判断程序是否能控制;
数制转换,(允许用户输入想把十进制转换成几进制),然后灵活的转换成对应的进制。
#include<iostream>
#include<stdlib.h>
using namespace std;
#define STACK_INIT_SIZE 100 //空间初始分配量
#define STACKINCREMENT 10 //分配增量
#define OVERFLOW -1
int exist=0; //判定初始化
typedef int SElemType;
typedef struct{
SElemType *base;
SElemType *top; //栈顶指针
int stacksize;
}SqStack;
//构造一个空栈
void 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;
}
//销毁栈
void DestroyStack(SqStack &S){
free(S.base);
S.base=NULL;
if(!S.base) cout<<"销毁成功!"<<endl;
else{
cout<<"销毁失败!"<<endl;
exit(0);
}
}
//清空栈
void ClearStack(SqStack &S){
S.top=S.base;
return;
}
//栈判空
void StackEmpty(SqStack &S){
if(S.top=S.base) cout<<"S为空栈!"<<endl;
e