一、实验实习目的及要求
1.掌握栈的存储表示和实现
2.掌握栈的基本操作实现。
3.掌握栈在解决实际问题中的应用。
二、实验实习设备(环境)及要求(软硬件条件)
实验在计算机机房,应用软件VC++;
三、实验实习项目、内容与步骤
问题描述:设计一个程序,演示用算符优先法对算术表达式求值的过程。利用算符优先关系,实现对算术四则混合运算表达式的求值。
(1)输入的形式:表达式,例如2*(3+4)#
包含的运算符只能有’+’ 、’-’ 、’’ 、’/’ 、’(’、 ‘)’,“#”代表输入结束符;
(2)输出的形式:运算结果,例如2(3+4)=14;
(3)程序所能达到的功能:对表达式求值并输出。
四、实验实习所得结果及分析
分析:按照题目所提示的内容,每一段文字用代码表示出来。中间出现的一些问题:
当C优先级小于栈符号的优先级时,开始运算,运算容易出现差错,需要明确运算到哪一步结束。两个栈也需要提起设好空的条件,及“#”,不然出栈运算不知道哪里结束。然后是每出一个栈元素,都需要把栈的top指向栈的下一位。
五、实验实习结果分析和(或)源程序调试过程
#include<stdio.h>
#include<stdlib.h>
#define OK 10000
#define ERROR 10001
struct node
{
int data;
struct node *next;
};
typedef struct node Node;
struct stack
{
Node *top;
int count;
};
typedef struct stack Stack;
int InitStack(Stack *S)//栈初始化
{
S->top = NULL;
S->count = 0;
return OK;
}
int EmptyStack(Stack *S)//判断栈是否还有元素,有返回OK
{
return (S->count == 0) ? OK : ERROR;
}
int Push(Stack *S,int e)
{
Node *p = (Node *)malloc(sizeof(Node));
if(NULL == p)
{
return ERROR;
}
p->data = e;
p->next = S->top;
S->top = p;
S->count++;
return OK;
}
int GetTop(Stack *S)//返回栈s栈顶元素
{
if(NULL == S->top)
{
return ERROR;
}