顺序栈基本操作实验报告

合集下载

栈的实验报告结论(3篇)

栈的实验报告结论(3篇)

第1篇一、实验目的1. 理解栈的基本概念和操作;2. 掌握栈的顺序存储和链式存储实现方法;3. 熟悉栈在程序设计中的应用。

二、实验内容1. 栈的顺序存储结构实现;2. 栈的链式存储结构实现;3. 栈的基本操作(入栈、出栈、判空、求栈顶元素);4. 栈在程序设计中的应用。

三、实验方法1. 采用C语言进行编程实现;2. 对实验内容进行逐步分析,编写相应的函数和程序代码;3. 通过运行程序验证实验结果。

四、实验步骤1. 实现栈的顺序存储结构;(1)定义栈的结构体;(2)编写初始化栈的函数;(3)编写入栈、出栈、判空、求栈顶元素的函数;(4)编写测试程序,验证顺序存储结构的栈操作。

2. 实现栈的链式存储结构;(1)定义栈的节点结构体;(2)编写初始化栈的函数;(3)编写入栈、出栈、判空、求栈顶元素的函数;(4)编写测试程序,验证链式存储结构的栈操作。

3. 栈在程序设计中的应用;(1)实现一个简单的四则运算器,使用栈进行运算符和操作数的存储;(2)实现一个逆序输出字符串的程序,使用栈进行字符的存储和输出;(3)编写测试程序,验证栈在程序设计中的应用。

五、实验结果与分析1. 顺序存储结构的栈操作实验结果:(1)入栈操作:在栈未满的情况下,入栈操作成功,栈顶元素增加;(2)出栈操作:在栈非空的情况下,出栈操作成功,栈顶元素减少;(3)判空操作:栈为空时,判空操作返回真,栈非空时返回假;(4)求栈顶元素操作:在栈非空的情况下,成功获取栈顶元素。

2. 链式存储结构的栈操作实验结果:(1)入栈操作:在栈未满的情况下,入栈操作成功,链表头指针指向新节点;(2)出栈操作:在栈非空的情况下,出栈操作成功,链表头指针指向下一个节点;(3)判空操作:栈为空时,判空操作返回真,栈非空时返回假;(4)求栈顶元素操作:在栈非空的情况下,成功获取栈顶元素。

3. 栈在程序设计中的应用实验结果:(1)四则运算器:成功实现加、减、乘、除运算,并输出结果;(2)逆序输出字符串:成功将字符串逆序输出;(3)测试程序:验证了栈在程序设计中的应用。

顺序栈实验报告

顺序栈实验报告

顺序栈实验报告1. 实验目的本实验旨在通过实现顺序栈的基本操作,加深对栈的理解,并学习如何使用顺序栈解决实际问题。

2. 实验内容本实验包含以下内容:1.实现栈的初始化操作,并判断栈是否为空;2.实现入栈操作,将元素插入栈顶;3.实现出栈操作,将栈顶元素删除,并返回删除的元素;4.实现获取栈顶元素的操作,不改变栈的结构;5.实现获取栈的长度操作。

3. 实验步骤3.1 栈的初始化首先,我们需要定义一个顺序栈的结构体,其中包括栈的容量、栈顶指针和存放元素的数组。

栈的容量可以根据实际需要进行调整,栈顶指针初始值为-1。

#define MAX_SIZE 100typedef struct {int data[MAX_SIZE];int top;} SqStack;然后,我们可以编写初始化栈的函数:void InitStack(SqStack *s) {s->top = -1;}3.2 判断栈是否为空我们可以通过栈顶指针的值是否等于-1来判断栈是否为空,编写如下函数:int IsEmpty(SqStack *s) {if (s->top == -1) {return1;} else {return0;}}3.3 入栈操作入栈操作即将元素插入栈顶。

在插入元素前,我们需要判断栈是否已满。

若栈未满,则将元素插入栈顶,并更新栈顶指针的值。

编写如下函数:int Push(SqStack *s, int x) {if (s->top == MAX_SIZE - 1) {return0; // 栈满,插入失败} else {s->top++;s->data[s->top] = x;return1; // 插入成功}}3.4 出栈操作出栈操作即将栈顶元素删除,并返回删除的元素。

在删除元素前,我们需要判断栈是否为空。

若栈不为空,则将栈顶元素删除,并更新栈顶指针的值。

编写如下函数:int Pop(SqStack *s, int *x) {if (IsEmpty(s)) {return0; // 栈空,删除失败} else {*x = s->data[s->top];s->top--;return1; // 删除成功}}3.5 获取栈顶元素获取栈顶元素不改变栈的结构,只需要返回栈顶指针对应的元素即可。

【最新推荐】顺序栈实验报告word版本 (13页)

【最新推荐】顺序栈实验报告word版本 (13页)

本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除!== 本文为word格式,下载后可方便编辑和修改! ==顺序栈实验报告篇一:数据结构顺序栈实验报告一、设计人员相关信息1. 设计者姓名、学号和班号:12地信李晓婧 1201X2429832. 设计日期:201X.3. 上机环境:VC++6.0二、程序设计相关信息1. 实验题目:编写一个程序,实现顺序栈(假设栈中元素类型为char)的各种基本运算,并在此基础上设计一个程序,完成如下功能:(1)初始化栈(2)判断栈是否为空(3)依次进栈元素a,b,c,d,e(4)判断栈是否为空(5)输出栈长度(6)输出从栈顶到栈底元素(7)输出出栈序列(8)判断栈是否为空(9)释放栈2. 实验项目组成:栈的初始化、销毁、判断是否为空、进栈、出栈、取栈顶元素。

3. 实验项目的程序结构(程序中的函数调用关系图):4. 实验项目包含的各个文件中的函数的功能描述:(1)初始化栈InitStack:建立一个新的空栈,实际上将栈顶指针指向-1即可。

(2)销毁栈DestroyStack:释放栈占用的存储空间(3)判断栈是否为空StackEmpty:栈为空的条件是s->op==-1。

(4)进栈Push:在栈不满的条件下,先将栈顶指针增1,然后在栈顶指针指向位置插入元素e。

(5)出栈Pop:在栈不为空的条件下,先将栈顶元素赋给e,然后将栈顶指针减1.(6)取栈顶元素GetTop:在栈不为空的条件下,将栈顶元素赋给e。

5. 算法描述或流程图:#include "stdio.h"#include "malloc.h"#include<stdlib.h>#define MaxSize 50typedef char ElemType;typedef struct{ElemType data[MaxSize];int top; /*栈顶指针*/}SqStack;//定义顺序栈类型void InitStack(SqStack*&s)/*初始化*/{s=(SqStack*)malloc(sizeof(SqStack));s->top=-1;//栈顶指针置为-1}void DestroyStack(SqStack *&s)/*销毁*/{free(s);}int StackEmpty(SqStack*s)/*判断是否为空*/{return(s->top==-1);}int push(SqStack *&s,ElemType a[],int n){int i; if(s->top==MaxSize-1)//栈满的情况,即栈上溢出 return 0; for(i=0;i<n;i++){ s->top++; //栈顶指针增1s->data[s->top]=a[i];//元素e放在栈顶指针处}int Pop(SqStack*&s,ElemType &e)/*出栈一个元素*/ {if(s->top==-1)//栈为空的情况,即栈下溢出 return 0;e=s->data[s->top]; //取栈顶元素s->top--; //栈顶指针减1return 1;}} return 1;int GetTop(SqStack *s,ElemType &e)/*取栈顶元素*/ {if(s->top==-1) //栈为空的情况,即栈下溢出 return 0;e=s->data[s->top];//取栈顶元素return 1;}int StackLength(SqStack *s)/*求栈长度*/{return(s->top+1);}void DispStack(SqStack *s){}void main(){int i,j;ElemType str[5]={'a','b';,'c','d','e'}; //定义字符数组 SqStack *st;//定义栈InitStack(st);/*初始化*/i=StackEmpty(st);//判断栈是否为空if(i==0) int i; for(i=s->top;i>=0;i--) printf("%c",s->data[i]); printf("\n");printf("顺序栈非空\n"); else printf("顺序栈为空\n");push(st,str,5); //进栈j=StackEmpty(st);if(j==0)printf("顺序栈非空\n"); else printf("顺序栈为空\n");printf("栈长度为:%d\n",StackLength(st)); //输出栈长度。

栈的建立实验报告

栈的建立实验报告

一、实验目的本次实验旨在通过编程实现栈的顺序存储结构和链式存储结构,并熟练掌握栈的基本操作,包括栈的建立、入栈、出栈、取栈顶元素、判栈空等。

通过实验,加深对栈这一数据结构的理解,提高数据结构在实际问题中的应用能力。

二、实验内容1. 顺序栈的建立与基本操作(1)顺序栈的建立顺序栈使用一维数组来实现,其大小为栈的最大容量。

在建立顺序栈时,需要初始化栈顶指针top为-1,表示栈为空。

(2)顺序栈的基本操作① 入栈操作(Push)当栈未满时,将新元素插入到栈顶,同时栈顶指针top加1。

② 出栈操作(Pop)当栈非空时,将栈顶元素出栈,同时栈顶指针top减1。

③ 取栈顶元素操作(GetTop)当栈非空时,返回栈顶元素。

④ 判栈空操作(IsEmpty)当栈顶指针top为-1时,表示栈为空。

2. 链式栈的建立与基本操作(1)链式栈的建立链式栈使用链表来实现,每个节点包含数据域和指针域。

在建立链式栈时,需要创建一个头节点,其指针域为空。

(2)链式栈的基本操作① 入栈操作(Push)当栈为空时,创建新节点作为栈顶节点;当栈非空时,将新节点插入到头节点的下一个节点,同时修改头节点的指针域。

② 出栈操作(Pop)当栈非空时,删除头节点的下一个节点,同时修改头节点的指针域。

③ 取栈顶元素操作(GetTop)当栈非空时,返回头节点的下一个节点的数据域。

④ 判栈空操作(IsEmpty)当头节点的指针域为空时,表示栈为空。

三、实验步骤1. 编写顺序栈和链式栈的建立函数。

2. 编写顺序栈和链式栈的基本操作函数。

3. 编写测试程序,验证顺序栈和链式栈的基本操作。

四、实验结果与分析1. 顺序栈实验结果通过编写顺序栈的建立和基本操作函数,成功实现了顺序栈的入栈、出栈、取栈顶元素、判栈空等操作。

在测试程序中,依次进行入栈、出栈、取栈顶元素等操作,均能正确执行。

2. 链式栈实验结果通过编写链式栈的建立和基本操作函数,成功实现了链式栈的入栈、出栈、取栈顶元素、判栈空等操作。

数据结构实验报告 顺序栈

数据结构实验报告  顺序栈

《数据结构与算法》实验报告一、实验内容1.栈的实现2.顺序栈的基本操作二、实验目的及要求熟悉栈的基本操作在顺序栈的实现。

通过具体应用实例在复习高级编程语言使用方法的基础上初步了解数据结构的应用。

三、设计分析与算法描述顺序栈的存储结构:typedef struct{int elem[Stack_Size];int top;}SeqStack;void InitStack(SeqStack *S)//构造一个空栈(初始化)int Push(SeqStack *S,int x)//进栈int Pop(SeqStack *S,int *x)//出栈int IsEmpty(SeqStack *S)//判栈是否空int IsFull(SeqStack *S)//判栈是否满int GetTop(SeqStack *S,int *x)//读栈顶四、附件:带注释的源程序#include"iostream.h"#define Stack_Size 50#define false 0#define true 1typedef struct{int elem[Stack_Size];int top;}SeqStack;void InitStack(SeqStack *S)//构造一个空栈(初始化) {S->top=-1;}int Push(SeqStack *S,int x)//进栈{if(S->top==Stack_Size-1)//栈已满return (false);S->top++;S->elem[S->top]=x;return (true);}int Pop(SeqStack *S,int *x)//出栈{if(S->top==-1)//栈已空return (false);else{*x=S->elem[S->top];S->top--;return (true);}}int IsEmpty(SeqStack *S)//判栈是否空{if(S->top==-1)return (true);elsereturn (false);}int IsFull(SeqStack *S)//判栈是否满{if(S->top==Stack_Size-1)return (true);elsereturn (false);}int GetTop(SeqStack *S,int *x)//读栈顶{if(S->top==-1)return (false);else{*x=S->elem[S->top];return (true);}}int main(){int i,temp;SeqStack st;InitStack(&st);for(i=0;i<10;i++)Push(&st,i);while(IsEmpty(&st)){Pop(&st,&temp);cout<<temp<<endl;}return 0;}。

栈的基本操作实验报告

栈的基本操作实验报告

栈的基本操作实验报告
《栈的基本操作实验报告》
实验目的:
通过本次实验,我们旨在掌握栈的基本操作,包括入栈、出栈、获取栈顶元素
等操作,并理解栈的特点和应用场景。

实验内容:
1. 入栈操作:将元素依次压入栈顶;
2. 出栈操作:从栈顶弹出元素;
3. 获取栈顶元素:不改变栈的状态,获取栈顶元素的值;
4. 判断栈空:判断栈是否为空;
5. 判断栈满:判断栈是否已满。

实验步骤:
1. 初始化一个栈;
2. 将元素依次入栈;
3. 依次进行出栈操作,观察栈的变化;
4. 获取栈顶元素,并进行判断栈空和栈满操作。

实验结果:
经过实验,我们成功掌握了栈的基本操作。

我们发现栈具有后进先出(LIFO)
的特点,适合于一些需要后续处理的数据结构,比如递归函数调用、表达式求
值等场景。

同时,我们也发现了栈的容量限制,需要在使用时注意栈是否已满。

结论:
栈是一种非常重要的数据结构,掌握了栈的基本操作能够帮助我们更好地理解
和应用它。

通过本次实验,我们对栈的特点和应用场景有了更深入的了解,相信在今后的学习和工作中能够更好地运用栈来解决问题。

栈的基本操作实验报告

栈的基本操作实验报告

一、实验目的1. 掌握栈的定义、特点、逻辑结构,理解栈的抽象数据类型。

2. 熟练掌握顺序栈和链栈两种结构类型的定义、特点以及基本操作的实现方法。

3. 了解栈在解决实际问题中的应用。

二、实验内容1. 编写顺序栈和链栈的基本操作函数,包括入栈(push)、出栈(pop)、判断栈空(isEmpty)、获取栈顶元素(getTop)等。

2. 利用栈实现字符序列是否为回文的判断。

3. 利用栈实现整数序列中最大值的求解。

三、实验步骤1. 创建顺序栈和链栈的结构体,并实现相关的基本操作函数。

2. 编写一个函数,用于判断字符序列是否为回文。

该函数首先将字符序列中的字符依次入栈,然后逐个出栈,比较出栈的字符是否与原序列相同,若相同则表示为回文。

3. 编写一个函数,用于求解整数序列中的最大值。

该函数首先将序列中的元素依次入栈,然后逐个出栈,每次出栈时判断是否为当前栈中的最大值,并记录下来。

四、实验结果与分析1. 顺序栈和链栈的基本操作函数实现如下:```c// 顺序栈的基本操作void pushSeqStack(SeqStack s, ElemType x) {if (s->top < MAXSIZE - 1) {s->top++;s->data[s->top] = x;}}void popSeqStack(SeqStack s, ElemType x) {if (s->top >= 0) {x = s->data[s->top];s->top--;}}bool isEmptySeqStack(SeqStack s) {return s->top == -1;}ElemType getTopSeqStack(SeqStack s) {if (s->top >= 0) {return s->data[s->top];}return 0;}// 链栈的基本操作void pushLinkStack(LinkStack s, ElemType x) {LinkStack p = (LinkStack )malloc(sizeof(LinkStack)); if (p == NULL) {exit(1);}p->data = x;p->next = s->top;s->top = p;}void popLinkStack(LinkStack s, ElemType x) { if (s->top != NULL) {LinkStack p = s->top;x = p->data;s->top = p->next;free(p);}}bool isEmptyLinkStack(LinkStack s) {return s->top == NULL;}ElemType getTopLinkStack(LinkStack s) {if (s->top != NULL) {return s->top->data;}return 0;}```2. 判断字符序列是否为回文的函数实现如下:```cbool isPalindrome(char str) {SeqStack s;initStack(&s);int len = strlen(str);for (int i = 0; i < len; i++) {pushSeqStack(&s, str[i]);}for (int i = 0; i < len; i++) {char c = getTopSeqStack(&s);popSeqStack(&s, &c);if (c != str[i]) {return false;}}return true;}```3. 求解整数序列中最大值的函数实现如下:```cint getMax(int arr, int len) {LinkStack s;initStack(&s);int max = arr[0];for (int i = 0; i < len; i++) {pushLinkStack(&s, arr[i]);if (arr[i] > max) {max = arr[i];}}while (!isEmptyLinkStack(&s)) {popLinkStack(&s, &max);}return max;}```五、实验心得通过本次实验,我对栈的基本操作有了更深入的理解。

数据结构实验报告顺序栈

数据结构实验报告顺序栈

(封面)学生实验报告学院:国际经贸学院课程名称:数据结构专业班级:09电子商务姓名:学号:学生实验报告(经管类专业用)一、实验目的及要求:1、目的通过实验,实现顺序栈的各种基本运算。

2、内容及要求编写一个程序,实现顺序栈的各种基本运算,并在此基础上设计一个主程序完成下列功能:(1)初始化栈S。

(2)判断栈S是否非空。

(3)依次进栈元素a,b,c,d,e。

(4)判断栈S是否非空。

(5)输出栈的长度。

(6)输出从栈顶到栈底的元素。

(7)输出出栈序列;(8)判断链栈S是否为空;(9)释放链栈二、仪器用具:三、实验方法与步骤:一、查阅顺序栈等相关资料,熟悉顺序栈基本概念和流程二、“开展”顺序栈实验流程三、整理实验数据和文档,总结实验的过程,编写实验报告四、实验结果与数据处理:1、顺序栈的代码:#include <stdio.h>#include <malloc.h>#define MaxSize 100typedef char ElemType;typedef struct{ElemType data[MaxSize];int top; //栈顶指针} SqStack;void InitStack(SqStack *&s){s=(SqStack *)malloc(sizeof(SqStack));s->top=-1;}void ClearStack(SqStack *&s){free(s);}int StackLength(SqStack *s){return(s->top+1);}int StackEmpty(SqStack *s){return(s->top==-1);}int Push(SqStack *&s,ElemType e) {if (s->top==MaxSize-1)return 0;s->top++;s->data[s->top]=e;return 1;}int Pop(SqStack *&s,ElemType &e) {if (s->top==-1)return 0;e=s->data[s->top];s->top--;return 1;}int GetTop(SqStack *s,ElemType &e) {if (s->top==-1)return 0;e=s->data[s->top];return 1;}void DispStack(SqStack *s){int i;for (i=s->top;i>=0;i--)printf("%c ",s->data[i]);printf("\n");void main() {// 主函数SqStack S=(SqStack *)malloc(sizeof(SqStack)); printf("(1)初始化顺序栈\n");InitStack(S);printf("(2)判断顺序栈是否为空:\n"); StackEmpty(S);printf("(3)依次进栈元素a,b,c,d,e:\n");Push(S,'a');Push(S,'b');Push(S,'c');Push(S,'d');Push(S,'e');printf("(4)判断顺序栈是否为空:\n"); StackEmpty(S);printf("(5)输出栈长度:%d\n",StackLength(S)); printf("(6)输出从栈顶到栈底的元素:\n"); StackTraverse(S);printf("(7)读出栈顶元素:%d\n",GetTop(S,e));printf("(8)删除栈顶元素:%d\n",Pop(S,e));printf("(9)输出从栈顶到栈底的元素:\n");StackTraverse(S);printf("(10)判断顺序栈是否为空\n");StackEmpty(S);printf("(11)释放栈。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据结构实验三课程数据结构实验名称顺序栈基本操作第页专业班级学号姓名实验日期:年月日评分一、实验目的1.熟悉并能实现栈的定义和基本操作。

2.了解和掌握栈的应用。

二、实验要求1.进行栈的基本操作时要注意栈"后进先出"的特性。

2.编写完整程序完成下面的实验内容并上机运行。

3.整理并上交实验报告。

三、实验内容1.编写程序任意输入栈长度和栈中的元素值,构造一个顺序栈,对其进行清空、销毁、入栈、出栈以及取栈顶元素操作。

2.编写程序实现表达式求值,即验证某算术表达式的正确性,若正确,则计算该算术表达式的值。

主要功能描述如下:(1)从键盘上输入表达式。

(2)分析该表达式是否合法:v1.0 可编辑可修改a) 是数字,则判断该数字的合法性。

若合法,则压入数据到堆栈中。

b) 是规定的运算符,则根据规则进行处理。

在处理过程中,将计算该表达式的值。

c) 若是其它字符,则返回错误信息。

(3)若上述处理过程中没有发现错误,则认为该表达式合法,并打印处理结果。

程序中应主要包含下面几个功能函数:l void initstack():初始化堆栈l int Make_str():语法检查并计算l int push_operate(int operate):将操作码压入堆栈l int push_num(double num):将操作数压入堆栈l int procede(int operate):处理操作码l int change_opnd(int operate):将字符型操作码转换成优先级l int push_opnd(int operate):将操作码压入堆栈l int pop_opnd():将操作码弹出堆栈l int caculate(int cur_opnd):简单计算+,-,*,/l double pop_num():弹出操作数四、实验步骤(描述实验步骤及中间的结果或现象。

在实验中做了什么事情,怎么做的,发生的现象和中间结果)第一题:#include <iostream>using namespace std;#define STACK_INIT_SIZE 100 //存储空间初始分配量#define STACKINCREMENT 10 //存储空间分配增量#define OVERFLOW -1#define OK 1#define NO -1#define NULL 0typedef int Status;typedef char SElemType;typedef struct{SElemType *base; //在栈构造之前和销毁之后,base的值为NULL SElemType *top; //栈顶指针int stacksize; //当前已分配的存储空间,以元素为单位} SqStack;Status Initstack(SqStack &S)//构造一个空栈S{=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));if(!exit(OVERFLOW);=;= STACK_INIT_SIZE;return OK;}//InitStackStatus StackEmpty(SqStack &S){if==return OK;elsereturn NO;}Status ClearStack (SqStack &S)//把S置为空{if=;return OK;}Status DsetroyStack (SqStack &S)//销毁栈S {=NULL;return OK;}Status Push(SqStack &S,SElemType e)//插入元素e为新的栈顶元素{if {=(SElemType *)realloc,+STACKINCREMENT)*sizeof(SElemType)); if(! //存储分配失败exit(OVERFLOW);=+;+=STACKINCREMENT;}*++=e;return OK;}//PushStatus Pop(SqStack &S,SElemType &c)//若栈不空,则删除S的栈顶元素,用c返回其值,并返回OK;否则返回ERROR {if==return NO;c=*;return OK;}//PopStatus GetTop(SqStack &S,SElemType &e){if ==return NO;e=*;return OK;}//GetTopint main(){SqStack S;Initstack(S);cout<<"输入要压到栈中的元素!"<<endl;char c;while((c=getchar())!='\n'){Push(S,c);}GetTop(S,c);cout<<"栈顶元素为:"<<c<<endl;//ClearStack (S);//DsetroyStack(S);for(int i=0;!=;i++){Pop(S,c);cout<<"栈中第"<<i+1<<"元素的值:";cout<<c<<endl;}return 0;}第二题:#include<iostream>using namespace std;#define STACK_SIZE 100#define STACKINCREMENT 10#define OVERFLOW -1#define OK 1#define NO 0typedef int Status;typedef char SElemType;typedef struct{SElemType *base;SElemType *top;int stacksize;}SqStack;int main(){char GetTop(SqStack &s);Status Initstack(SqStack &s);Status push_operate(SqStack &s,SElemType e);Status push_num(SqStack &s,int e);Status Stackempty(SqStack &s);Status pop_num(SqStack &s,int &c);Status pushoperate(SElemType operate);Status pushnum(SElemType num);Status caculate(SElemType a,SElemType operate,SElemType b);Status pop_operate(SqStack &s,SElemType &c);Status change(SElemType e);char Precede(SElemType a,SElemType b);char Operatecxz();int m;m=Operatecxz();cout<<m<<endl;return 0;}Status change(SElemType e){int m;m=e-48;return m;}Status Initstack(SqStack &s){=(SElemType *)malloc(STACK_SIZE*sizeof(SElemType));if(!exit(OVERFLOW);=;=STACK_SIZE;return OK;}Status Stackempty(SqStack &s){if==return OK;elsereturn NO;}Status push_num(SqStack &s,int e){if {=(SElemType *)realloc,+STACKINCREMENT)*sizeof(SElemType));if(!exit(OVERFLOW);=+;+=STACKINCREMENT;}*++=e;return OK;}Status push_operate(SqStack &s,SElemType e){if {=(SElemType *)realloc,+STACKINCREMENT)*sizeof(SElemType));if(!exit(OVERFLOW);=+;+=STACKINCREMENT;}*++=e;return OK;}Status pop_operate(SqStack &s,SElemType &c){if==return NO;c=*;return OK;}Status pop_num(SqStack &s,int &c){if==return NO;c=*;return OK;}char GetTop(SqStack &s){char c;if==return NO;c=*;return c;}Status caculate(int a,SElemType operate,int b){int s;if(operate=='+')s=a+b;if(operate=='-')s=a-b;if(operate=='*')s=a*b;if(operate=='/')s=a/b;return s;}Status In(SElemType c){if(c=='+'||c=='-'||c=='*'||c=='/'||c=='#'||c=='('||c==')') return OK;if(c>='0'&&c<='9')return NO;return -1;}char Precede(SElemType a,SElemType b){if(a=='+'||a=='-'){if(b=='+'||b=='-'||b==')'||b=='#')return '>';if(b=='*'||b=='/'||b=='(')return '<';}if(a=='*'||a=='/'){if(b=='+'||b=='-'||b==')'||b=='*'||b=='/'||b=='#') return '>';if(b=='(')return '<';}if(a=='('){if(b==')')return '=';if(b=='+'||b=='-'||b=='*'||b=='/')return '<';if(b=='#')return ' ';}if(a==')'){if(b==')')return ' ';if(b=='+'||b=='-'||b=='*'||b=='/'||b=='('||b=='#') return '>';}if(a=='#'){if(b=='#')return '=';if(b=='+'||b=='-'||b=='*'||b=='/'||b=='(')return '<';if(b==')')return ' ';}return ' ';}char Operatecxz(){SqStack Operate,Num;char c,e,x;int num,a,b,flat=1,sz=0;Initstack(Operate);push_operate(Operate,'#');Initstack(Num);c=getchar();while(c!='#'||GetTop(Operate)!='#') {if(In(c)==-1){cout<<"input error!"<<endl;flat=0;break;}if(In(c)!=1){if(sz==0){num=change(c);sz=1;c=getchar();continue;}if(sz==1)num=num*10+change(c);c=getchar();continue;}else{if(sz==1)push_num(Num,num);sz=0;x=GetTop(Operate);switch(Precede(GetTop(Operate),c)){case '<':{push_operate(Operate,c);c=getchar();break;}case '=':{pop_operate(Operate,e);c=getchar();break;}case '>':{pop_num(Num,a);pop_operate(Operate,e);pop_num(Num,b);push_num(Num,caculate(b,e,a));break;}}}}pop_operate(Operate,e);if(e!='#')flat=0;if(flat==1){pop_num(Num,a);return a;}if(flat==0)return 0;}五.实验结果与讨论(描述最终得到的结果,并进行分析说明,可能的误差原因)第一题:1 把主函数中的ClearStack (S);DsetroyStack(S)注释掉的结果:2 不把ClearStack (S)注释掉,把栈清空:3 不把DsetroyStack(S)注释掉,即销毁栈:出现一堆乱码,说明销毁成功。

相关文档
最新文档