【精选】数据结构算法设计与实现指导(C语言版)

3 章

栈——实验三

3.1 实验目的及要求

1.理解特 的线性结构——顺序栈的抽象数据类型的定义,及其在 C 语言环境中的

表示方法。

2 .理解顺序栈的基本操作的算法,及其在C 语言环境中一些主要基本操作的实现。

3 .在C 语言环境下实现顺序栈的应用操作:

利用栈实现十进制数转换成八进制数。

② 利用栈实现一位数的加减乘除的表达式求解。

3.2 实 验 内 容

经过对实验目的及要求的分析,本实验仍然采用首先描述栈的基本操作集函数,然后

分别在两个应用操作中使用基本操作集函数来实现。

由于栈是一种特 的线性结构,仅在栈顶进行插入和删除操作,即栈具有后进先出的

特 ,故其操作比一般的线性表更为容易,所以在本实验中有关栈的基本操作集的实现都

比较简单,没有做过多的说明,而是在数制转换和表达式求解的应用操作中加入了更多的

编程技巧,使读者通过本实验不仅了解栈这种特 结构的线性表,而且掌握利用栈可实现

很多的应用,尤其是在实现表达式求解时用到了两个顺序栈,并且加入了运算符的优先关

系的判断等,实现稍有难度。

在程序 Stack .c 中,只包含了数制转换和一位数的表达式求解,多位数的表达式求

解思想与一位数表达式求解思想一致,但需要添加多位数的接收处理,请读者自行编写

代码。

程序名为:Stack.c。

在Stack.c 中包含的函数如图3.1 所示。

C

数据结构算法设计与实现指导 ( 语言版)

28

图3.1 Stack.c 中包含的函数一览表

3.3 功能函数的分析设计及源代码

本部分列出了实现顺序栈的操作的源代码,并在适当的位置上添加了一些文字和流程

图的注释,帮助读者理解顺序存储的栈的存储结构及操作算法。

文件名:Stack.c

#include "alloc.h"
#include "stdio.h"
#define STACK_INIT_SIZE 10
#define STACKINCREMENT 2
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int SElemType;
typedef int Status;
//定义顺序栈的结构
typedef struct SqStack
{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
//初始化一个空栈
Status InitStack(SqStack *S)
{
(*S).base=(SElemType *)malloc (STACK_INIT_SIZE*sizeof(SElemType));
if(!(*S).base)
exit(OVERFLOW);
第3 章 栈——实验三
29
(*S).top=(*S).base;
(*S).stacksize=STACK_INIT_SIZE;
return OK;
}
//数据元素入栈
Status Push (SqStack *S,SElemType e)