《实验三--顺序栈操作实现》由会员分享,可在线阅读,更多相关《实验三--顺序栈操作实现(6页珍藏版)》请在金锄头文库上搜索。
1、实验三 顺序栈操作实现实验日期: 2017 年 4 月 1 日 实验目的及要求1. 熟练掌握栈的结构,以及这种数据结构的特点;2. 能够在两种存储结构上实现栈的基本运算,特别注意栈满和栈空的判断条件及描述方法。实验内容已知顺序栈的类型定义如下:#define MAX 100typedef char datatype;typedef struct datatype dataMAX; int top;SeqStack, *SeqStackptr; 任务1题目要求任务一:创建自定义头文件seqStack.h,包含顺序栈的数据类型定义及基本操作函数,需定义的基本操作如下:(1)void Error(c
2、har *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);/*读栈顶元素(不出
3、栈)*/(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和str
4、out字符数组中分别存放源文件名和目标文件名。(思路: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
5、,每个结点包含值域data和指针域next,判断栈空的条件为 top=NULL ,当p所指向的结点入栈,首先执行 判断栈是否满 ,然后执行 p-datap-top+=x 操作。(3)设数组S100存储一个顺序栈的元素,变量top指示下一个入栈元素在数组中的下标位置,栈为空的条件是 top-1=NULL ,栈为满的条件是 top=100 。3seqStack.h及sy13.cpp源程序清单(含必要的注释)SeqStack.h:#include#include#define MAX 100typedef char datatype;typedef struct datatype dataMAX;i
6、nt 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); /*出栈(元素
7、从栈顶弹出)*/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,栈空;返回值
8、为0,栈不空*/int FullStack(SeqStackptr sp) /*判栈满*/return sp-top = MAX; /*返回值为1,栈满;返回值为0,栈不满*/void Push(SeqStackptr sp, datatype x) /*进栈(元素压入栈顶)*/if (FullStack(sp) /*若栈满*/Error(Stack Full);sp-datasp-top = x;sp-top+;datatype Pop(SeqStackptr sp) /*出栈(元素从栈顶弹出)*/if (EmptyStack(sp) /*若栈空*/Error(Stack Empty);sp
9、-top-;return sp-datasp-top;datatype GetTop(SeqStackptr sp) /*读栈顶元素(不出栈)*/if (EmptyStack(sp) /*若栈空*/Error(Stack Empty);return sp-datasp-top - 1;int Count(SeqStackptr sp) /*计算栈中元素个数*/return sp-top;sy13.cpp:#includeseqStack.hvoid Trans(int n, int r, char str); /*把n整数转换为r进制的值并存于str数组中*/void TransFile(in
10、t r, char strin, char strout); /*把strin文件中十进制整数转换为r进制的值并存于文件strout中。其中strin和strout字符数组中分别存放源文件名和目标文件名*/void main() int r;char sMAX, tMAX;printf(请输入进制r的值:);scanf(%d, &r);TransFile(r, s, t);void Trans(int n, int r, char str) /*把n整数转换为r进制的值并存于str数组中*/int i, c;SeqStack s;InitStack(&s);do c = n%r;if (c 1
11、0) c = c + 0;else c = c - 10 + a;Push(&s, c); while (n /= r);i = 0;while (!EmptyStack(&s) stri+ = Pop(&s);stri = 0;void TransFile(int r, char strin, char strout) /*把strin文件中十进制整数转换为r进制的值并存于文件strout中。其中strin和strout字符数组中分别存放源文件名和目标文件名*/int num, i, n;char resultMAX;FILE *fin;FILE *fout;if (fin = fopen(
12、D:/strin.txt, r) = NULL) Error(Can not open file!);if (fout = fopen(D:/strout.txt, w) = NULL) Error(Can not open file!);fprintf(fout, 源数据转化为%d进制后为:n, r);while (!feof(fin) fscanf(fin, %d, &num);Trans(num, r, result);fprintf(fout, %s , result);fclose(fin);fclose(fout);4源文本文件的内容,程序执行后目标数据文件的内容实验总结分析(本程序的重点与难点,调试中出现的问题及解决方法等)顶管位置主要位于粉质粘土层,地下水位以下。开挖竖井过程中如出现异常地质情况,及时与设计单位联系,进行协商处理。施工前应与铁路供电段、电务段、通信段联系,首先探明铁路两侧施工范围内各种管线位置、埋深、并进行监护和防护。