顺序栈的表示和实现
来源:互联网 发布:java中class的作用 编辑:程序博客网 时间:2024/05/17 12:54
//库函数头文件包含#include <stdio.h>#include <stdlib.h>#include <malloc.h>#include <string.h>//状态码的定义#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2#define STACKINITSIZE 3#define ADDSTACKSIZE 10typedef int SElemType;typedef int Status;//栈结构的定义typedef struct Stack{ SElemType *base; SElemType *top; int LengthOfStack;}Stack;//构造一个空栈Status InitStack(Stack &S){ S.base = (SElemType *)malloc(STACKINITSIZE * sizeof(SElemType)); //开辟一段空间 if(!S.base) exit(OVERFLOW); //储存分配失败 S.top = S.base; //使栈顶指针指向栈底 S.LengthOfStack = STACKINITSIZE; //记录开辟的空间的大小 return OK;}//栈的销毁Status DestroyStack(Stack &S){ S.top = S.base; //将栈顶指针指向栈底 free(S.base); //释放开辟的空间 S.LengthOfStack = 0; //将最大容量改为0 return OK;}//清空栈Status ClearStack(Stack &S){ S.top = S.base; //直接将栈顶指针指向栈底,就相当于栈被清空 return OK;}//判断栈长度Status StackLength(Stack S){ return S.top - S.base;}//判断栈空bool Is_StackEmpty(Stack S){ if(S.base == S.top) return true; return false;}//获得栈顶元素的值SElemType GetTop(Stack &S){ if(S.base == S.top) return ERROR; return *(S.top - 1);}//入栈Status Push(Stack &S, SElemType elem){ if(StackLength(S) >= S.LengthOfStack){ S.LengthOfStack += ADDSTACKSIZE; S.base = (SElemType *)realloc(S.base, (S.LengthOfStack) * sizeof(SElemType)); if(!S.base) exit(OVERFLOW); } *S.top = elem; S.top++; return OK;}//出栈Status Pop(Stack &S, SElemType &elem){ if(S.base == S.top) return ERROR; elem = *(S.top - 1); S.top--; return OK;}//遍历函数Status visit(SElemType elem){ printf("%d ", elem); return OK;}//遍历栈Status StackTraverse(Stack S, Status (*visit)(SElemType)){ SElemType e; while(!Is_StackEmpty(S)){ if(visit(GetTop(S)) == ERROR) return ERROR; Pop(S, e); } return OK;}//主函数int main(){ Stack S; InitStack(S); int a; printf("输入5个数字:\n"); for(int i = 0; i < 5; i++){ scanf("%d", &a); Push(S, a); } printf("下面是执行遍历操作的输出结果:\n"); StackTraverse(S, visit); printf("\n下面是返回栈长的结果:\n"); printf("%d\n", StackLength(S)); printf("下面是执行出栈后遍历的结果:\n"); Pop(S, a); StackTraverse(S, visit); printf("\n下面是获得栈顶元素的操作:\n%d\n", GetTop(S)); printf("下面是判断栈是否为空的操作(空输出YES,不空输出NO和栈长):\n"); if(Is_StackEmpty(S)) printf("YES"); else printf("NO %d", StackLength(S)); return 0;}
阅读全文
0 0
- 顺序栈的表示和实现
- 顺序栈的表示和实现
- 栈的顺序表示和实现
- 栈的顺序表示和实现
- 栈的顺序表示和实现
- 栈的顺序表示和实现(数据结构)
- 栈的顺序表示和实现
- 栈的顺序表示和实现
- 栈的顺序表示和实现
- 顺序栈的表示和实现
- 顺序栈的表示和实现
- 重温数据结构:栈的顺序表示和实现与栈的链式表示和实现
- 2007.08.27栈的表示和实现之顺序栈
- 数据结构(3):顺序栈的表示和实现
- c语言顺序栈的表示和实现
- 线性表的顺序表示和实现
- 线性表的顺序表示和实现
- 线性表的顺序表示和实现
- ubuntu下安装神经网络绘图工具Graphviz
- 计算机等级考试--三级网络技术1
- php实现文件上传
- Java 变量之间的一些区别
- 携程福利变噩梦 上海妇联:严肃处理旗下杂志
- 顺序栈的表示和实现
- 卡尔曼滤波 概率
- 博通收购高通计划引起市场震动 对华为影响不大
- SpringMVC数据绑定三(数组)
- Adobe After Effects CC 2018 Mac版下载附安装教程
- 二、八、十、十六进制转换(图解篇)
- 三个流行MySQL分支的对比
- 页面分页
- Tensorflow学习笔记(一)之多层感知机