数据结构之链式栈的构建
2016-02-02 12:03
573 查看
#include<iostream> #include<cstdio> #include<stdlib.h> #include<malloc.h> #include<math.h> using namespace std; #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 typedef int Status; typedef int Elemtype; typedef struct{ Elemtype *base; Elemtype *top; int stacksize;//表示的是栈的空间大小与入栈出栈时候的操作无关 }Sqstack; Status create(Sqstack &S); Status destroy(Sqstack &S); Status push(Sqstack &S); Status pop(Sqstack &S,Elemtype &e); int main() { Sqstack stack;//对结构体进行实例化 Elemtype r; r=create(stack); Elemtype i,e; for(i=1;i<=5;i++) { r=push(stack); } while(stack.base!=stack.top) { r=pop(stack,e); printf("%d",e); } return 0; } Status create(Sqstack &S) { S.base=S.top=(Elemtype*)malloc(STACK_INIT_SIZE*sizeof(Elemtype) ); if(S.base==NULL) { printf("内存分配失败,系统退出"); system("pause"); exit(OVERFLOW); } S.stacksize=STACK_INIT_SIZE; return OK; } Status push(Sqstack &S) { Elemtype e; if(S.top-S.base>=S.stacksize) { S.base=(Elemtype*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(Elemtype) ); S.top=S.base+S.stacksize; S.stacksize=S.stacksize+STACKINCREMENT; } printf("请输入你要增加的数字\n"); scanf("%d",&e); *S.top++=e; return OK; } Status destroy(Sqstack &S) { S.top=NULL; free(S.base); S.base=NULL; S.stacksize=0; return OK; } Status pop(Sqstack &S,Elemtype &e) { if(S.base==S.top){return ERROR;} S.top--; e=*S.top;//返回的e是删除之后的栈顶元素的值; return OK;//栈顶指针不指向任何元素,因此取值的时候应该先-1在赋值; }
相关文章推荐
- [数据结构与算法分析] 链表的游标实现
- 学习笔记------数据结构(C语言版)栈应用 行编辑程序
- 数据结构图文解析之:栈的简介及C++模板实现
- linux内核数据结构之kfifo
- 2015年大二上-数据结构-图-2-(1)-Prim算法
- 小蚂蚁学习数据结构(28)——题目——顺序栈的遍历输出
- SICP 习题 (2.7) 解题总结 : 定义区间数据结构
- 数据结构与算法——二叉搜索树的操作集(C语言)
- 数据结构——树
- 【数据结构学习笔记】——根据中缀表达式构建二叉树并输出
- [数据结构与算法分析] 单链表基本操作的实现
- 数据结构《17》---- 自己主动补齐之《二》----Ternary Search Tree
- 数据结构图文解析之:数组、单链表、双链表介绍及C++模板实现
- 基本概念和基础知识
- linux0.11相关进程数据结构 GDT,LDT,GDTR,LDTR
- 数据结构之堆排序
- 数据结构——采用分离链接解决冲突问题的散列表
- 数据结构——平衡二叉搜索树(AvlTree)的实现
- 数据结构——二叉搜索树(BinarySearchTree)的实现
- 数据结构——LinkedQueue的实现