数据结构数据结构 栈的操作实例详解栈的操作实例详解
数据结构数据结构 栈的操作实例详解栈的操作实例详解
说明:说明:
往前学习数据结构,想运行一个完整的顺序栈的程序都运行不了,因为书上给的都是一部分一部分的算法,并没有提供一
个完整可运行的程序,听了实验课,自己折腾了一下,总算可以写一个比较完整的顺序栈操作的小程序,对于栈也慢慢开始有
了感觉。下面我会把整个程序拆开来做说明,只要把这些代码放在一个文件中,用编译器就可以直接编译运行了。
一、实现一、实现
1.程序功能程序功能
关于栈操作的经典程序,首当要提及进制数转换的问题,利用栈的操作,就可以十分快速地完成数的进制转换。
2.预定义、头文件导入和类型别名预定义、头文件导入和类型别名
代码如下:
#include<stdio.h>
#include<stdlib.h>
#define OVERFLOW -1
#define ERROR 0
#define FALSE 0
#define TRUE 1
#define OK 1
typedef int ElemType;
typedef int Status;
除了两个头文件的导入是必须的之外,下面做两点说明:
(1)其余的常量定义都是可选的,为的就是在下面的代码书写过程中可以尽量使用英文来表达程序的意思,而不是在代码的
实现过程中直接使用数字,依个人喜欢,也可以直接使用数字;
(2)使用typedef做类型的别名也仅仅是为了程序中代码的意思更加清晰明了而已,实际也可以不这样使用;
3.顺序栈的定义顺序栈的定义
代码如下:
typedef struct{
ElemType *elem; //存储空间的基址
int top; //栈顶元素的下一个元素,简称栈顶位标
int size; //当前分配的存储容量,作用看入栈操作就可以知道
int increment; //扩容时,增加的存储容量,作用看入栈操作就可以知道
} SqStack; //顺序栈名称
4.栈的初始化栈的初始化
代码如下:
Status InitStack_Sq(SqStack &S, int size, int inc){ //接受3个参数,&S是对结构体的引用
S.elem = (ElemType*)malloc(size*sizeof(ElemType)); //分配存储空间
if(S.elem == NULL) return OVERFLOW; //判断上一步分配存储空间是否成功
S.top = 0; //置S为空栈,S.top为0即表示栈为空栈
S.size = size; //栈的空间初始容量值
S.increment = inc; //栈的空间初始增量值(如果需要扩容)
return OK; //上面的执行正常,返回OK
}
5.空栈的判断空栈的判断
代码如下:
Status StackEmpty_Sq(SqStack S){
if(S.top == 0)
return TRUE;
else
return FALSE;
}