实验三 顺序栈操作实现教学教材
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三顺序栈操作
实现
实验三顺序栈操作实现
实验日期: 2017 年 4 月 1 日
实验目的及要求
1. 熟练掌握栈的结构,以及这种数据结构的特点;
2. 能够在两种存储结构上实现栈的基本运算,特别注意栈满和栈空的判断条件及描述方法。
实验内容
已知顺序栈的类型定义如下:
#define MAX 100
typedef char datatype;
typedef struct{
datatype data[MAX];
int top;
}SeqStack, *SeqStackptr;
任务
1.题目要求
任务一:
创建自定义头文件seqStack.h,包含顺序栈的数据类型定义及基本操作函数,需定义的基本操作如下:
(1)void Error(char *s);/*自定义错误处理函数*/
(2)void InitStack (SeqStackptr sp);/*初始化栈——置空栈*/
(3)int EmptyStack (SeqStackptr sp);/*判栈空*/
(4)int FullStack (SeqStackptr sp);/*判栈满*/
(5)void Push (SeqStackptr sp, datatype x);/*进栈(元素压入栈顶)*/
(6)datatype Pop (SeqStackptr sp);/*出栈(元素从栈顶弹出)*/
(7)datatype GetTop (SeqStackptr sp);/*读栈顶元素(不出栈)*/
(8)int Count (SeqStackptr sp);/*计算栈中元素个数*/
任务二:
创建一个新的程序文件sy13.cpp,请调用seqStack.h提供的顺序栈操作的函数完成把源文本文件中的所有十进制数转换成相应的指定进制的数值存于新的文本文件中,要求定义如下函数:
(1)void Trans(int n, int r, char str[])
功能:把n整数转换为r进制的值并存于str数组中;
(2)void TransFile(int r,char strin[],char strout[]);
功能:把strin文件中十进制整数转换为r进制的值并存于文件strout中。其中strin和strout字符数组中分别存放源文件名和目标文件名。
(思路:1. 以只读方式打开strin中的文件,以只写方式打开存于strout中的文件
2. 循环读取strin文件
(1)读一个整数到变量num中
(2)调用Trans函数将num转换为r进制的字符串result
(3)将字符串result写入到文件strout中
3. 关闭strin文件,strout文件。)
(3)main函数中准备指定进制r的值,源文件名和目标文件名,调用TransFile函数完成相应要求。
2.请回答下列问题
(1)栈是限定在表的一端进行插入或删除操作的线性表,其操作原则是后进先出。
(2)一个不带表头结点链栈的栈顶指针是top,每个结点包含值域data和指针域next,判断栈空的条件为 top==NULL ,当p所指向的结点入栈,首先执行判断栈是否满,然后执行 p->data[p->top++]=x 操作。
(3)设数组S[100]存储一个顺序栈的元素,变量top指示下一个入栈元素在数组中的下标位置,栈为空的条件是 top-1==NULL ,栈为满的条件是
top>=100 。
3.seqStack.h及sy13.cpp源程序清单(含必要的注释)
SeqStack.h:
#include
#include
#define MAX 100
typedef char datatype;
typedef struct {
datatype data[MAX];
int top;
}SeqStack, *SeqStackptr;
SeqStack s;
SeqStackptr sp;
void Error(char *s); /*自定义错误处理函数*/
void InitStack(SeqStackptr sp); /*初始化栈——置空栈*/
int EmptyStack(SeqStackptr sp); /*判栈空*/
int FullStack(SeqStackptr sp); /*判栈满*/
void Push(SeqStackptr sp, datatype x); /*进栈(元素压入栈顶)*/
datatype Pop(SeqStackptr sp); /*出栈(元素从栈顶弹出)*/
datatype GetTop(SeqStackptr sp); /*读栈顶元素(不出栈)*/
int Count(SeqStackptr sp); /*计算栈中元素个数*/
void Error(char *s) /*自定义错误处理函数*/
{
printf("\n %s", s);
exit(1); /*返回OS,该函数定义在stdlib.h中*/
}
void InitStack(SeqStackptr sp) /*初始化栈——置空栈*/
{
sp->top = 0;
}
int EmptyStack(SeqStackptr sp) /*判栈空*/
{
return sp->top == 0; /*返回值为1,栈空;返回值为0,栈不空*/
}
int FullStack(SeqStackptr sp) /*判栈满*/
{
return sp->top >= MAX; /*返回值为1,栈满;返回值为0,栈不满*/ }
void Push(SeqStackptr sp, datatype x) /*进栈(元素压入栈顶)*/
{
if (FullStack(sp)) { /*若栈满*/
Error("Stack Full");
}
sp->data[sp->top] = x;
sp->top++;
}
datatype Pop(SeqStackptr sp) /*出栈(元素从栈顶弹出)*/
{
if (EmptyStack(sp)) { /*若栈空*/
Error("Stack Empty");
}
sp->top--;
return sp->data[sp->top];
}
datatype GetTop(SeqStackptr sp) /*读栈顶元素(不出栈)*/