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