【数据结构和算法】【栈】顺序栈的代码实现
来源:互联网 发布:最好玩的网络大型游戏 编辑:程序博客网 时间:2024/06/06 05:36
顺序栈的存储方式如下图所示:
代码实现如下:
// Filename: sq_stack.h#ifndef SQ_STACK_H_INCLUDED#define SQ_STACK_H_INCLUDED#ifndef _OK_#define OK 0#endif#ifndef _ERROR_#define ERROR 1#endif#ifndef _TRUE_#define TRUE 1#endif#ifndef _FALSE_#define FALSE 0#endif#ifndef _BiTNode_#define _BiTNode_typedef char TElemType;typedef struct BiTNode{ TElemType data; struct BiTNode *lchild; struct BiTNode *rchild;} BiTNode, *BiTree;#endif// 栈中结点的元素类型typedef BiTree SElemType; // TODO: 根据实际应用修改类型typedef struct SqStack{ SElemType *top; // 栈顶指针 SElemType *base; // 栈底指针 int stacksize; // 栈当前可使用的最大容量}SqStack;#define STACK_INIT_SIZE 100 // 顺序栈的存储空间初始分配量#define STACK_INCREMENT 10 // 顺序栈的存储空间分配增量// 栈初始化,即构造一个空栈,成功返回OK,失败返回ERRORint InitStack(SqStack *pS);// 销毁堆栈,成功返回OK,失败返回ERRORint DestroyStack(SqStack *pS);// 判断是否为空栈,是空栈返回TRUE,不是空栈返回FALSEint StackEmpty(SqStack *pS);// 返回栈顶元素,成功返回OK,失败返回ERRORint GetTop(SqStack *pS, SElemType *pE);// 入栈,即插入元素至栈顶,成功返回OK,失败返回ERRORint Push(SqStack *pS, SElemType *pE);// 出栈,即删除元素从栈顶,成功返回OK,失败返回ERRORint Pop(SqStack *pS, SElemType *pE);// 从栈底到栈顶进行遍历,打印栈的元素,成功返回OK,失败返回ERRORint StackTraverse(SqStack *pS, void (*Visit)());#endif // SQ_STACK_H_INCLUDED
// Filename: sq_stack.c#include <stdio.h>#include <stdlib.h>#include "sq_stack.h"// 栈初始化,即构造一个空栈,成功返回OK,失败返回ERRORint InitStack(SqStack *pS){ if (!pS) return ERROR; pS->base = (SElemType *)malloc(sizeof(SElemType) * STACK_INIT_SIZE); if (!pS->base) return ERROR; pS->top = pS->base; pS->stacksize = STACK_INIT_SIZE; return OK;}// 销毁堆栈,成功返回OK,失败返回ERRORint DestroyStack(SqStack *pS){ if (!pS) return ERROR; free(pS->base); return OK;}// 判断是否为空栈,是空栈返回TRUE,不是空栈返回FALSEint StackEmpty(SqStack *pS){ if (!pS) return TRUE; if (pS->top == pS->base) return TRUE; return FALSE;}// 返回栈顶元素,成功返回OK,失败返回ERRORint GetTop(SqStack *pS, SElemType *pE){ if (!pS || !pE) return ERROR; if (StackEmpty(pS)) return ERROR; *pE = *(pS->top - 1); return OK;}// 入栈,即插入元素至栈顶,成功返回OK,失败返回ERRORint Push(SqStack *pS, SElemType *pE){ if (!pS || !pE) return ERROR; // 栈满则扩充存储空间 if (pS->top - pS->base >= pS->stacksize) { pS->base = (SElemType *)realloc(pS->base, pS->stacksize + sizeof(SElemType) * STACK_INCREMENT); if (!pS->base) exit(1); pS->top = pS->base + pS->stacksize; pS->stacksize += STACK_INCREMENT; } *pS->top = *pE; pS->top++; return OK;}// 出栈,即删除元素从栈顶,成功返回OK,失败返回ERRORint Pop(SqStack *pS, SElemType *pE){ if (!pS || !pE) return ERROR; // 栈空则返回失败 if (StackEmpty(pS)) return ERROR; pS->top--; *pE = *(pS->top); return OK;}// 从栈底到栈顶进行遍历,对栈的元素调用访问函数Visit(),成功返回OK,失败返回ERRORint StackTraverse(SqStack *pS, void (*Visit)()){ if ((!pS) || (!Visit)) return ERROR; // 栈空则提示返回 if (StackEmpty(pS)) printf("空栈\n"); SElemType *p = NULL; for (p = pS->base; p < pS->top; p++) { (*Visit)(p); } return OK;}
0 0
- 【数据结构和算法】【栈】顺序栈的代码实现
- 数据结构顺序和栈的代码
- 数据结构-顺序栈代码实现
- 栈的顺序表示和实现(数据结构)
- 看数据结构写代码(8)顺序栈的实现
- 数据结构 P46-47 算法实现 顺序栈的基本操作
- 数据结构---栈的顺序实现
- 数据结构-----顺序栈的实现
- 数据结构(16)顺序栈的表示和算法表示
- 数据结构算法代码实现——栈和队列(一)
- 数据结构算法代码实现——栈和队列(二)
- 数据结构和算法--栈的数组实现
- 数据结构和算法--栈的链式实现
- 数据结构(3):顺序栈的表示和实现
- 顺序栈的代码实现
- 数据结构顺序表的代码实现
- 数据结构算法代码实现——线性表的顺序表示与实现(二)
- 数据结构—栈的顺序的实现
- Square Country
- 企业服务总线之日志分析平台
- 如此恢复mysql 数据库*.frm,*.myd,*.myi文件
- Opengl ES 1.x NDK实例开发之七:旋转的纹理立方体
- 一. PHP模式设计----PHP类和对象的高级特性
- 【数据结构和算法】【栈】顺序栈的代码实现
- 图像特征提取:SIFT定位算法关键步骤的说明
- 【七】注入框架RoboGuice使用:(Your First Custom Binding)
- 系统上安装了多种浏览器,能否指定某浏览器访问指定页面?请说明原由。
- 机器学习排序
- 图像添加噪声
- .htaccess如何设置防盗链某个目录的图片
- Tiny HTTPd代码总结
- 你好,C++(15)四两拨千斤——3.9 指向内存位置的指针