数据结构(c)——栈
来源:互联网 发布:问道九游端口 编辑:程序博客网 时间:2024/06/05 20:43
数据结构中栈还是比较常用的,在某些特定情况下非常便利,例如进制转化等。
栈又称为后进先出的线性表(LIFO),同样分为顺序栈和链式栈,实现起来顺序栈和顺序表差不多,链式栈和链式队列差不多而且更加简单。
顺序栈的实现
和顺序表类似,首先定义宏,存储空间初始分配量和每次再分配的增量,以及结构体表示数据结构。
#include <stdio.h>#include <stdlib.h>#include <stddef.h> //定义NULL#define STACK_INIT_SIZE 100#define STACKINCREMENT 10typedef struct SqStack{ char *base; char *top; //非空栈中,栈顶指针指向栈顶元素的下一个位置 int stacksize; //当前已分配的总存储容量 };
顺序栈和顺序表相较,多了个栈顶指针,少了当前长度,栈顶指针-栈底指针即可得出当前栈长。
栈空时,栈顶指针和栈底指针都指向基址。和顺序表相同,也可以通过S.base[x]随机访问元素。
定义相关函数:
void InitStack(SqStack &S);void GetTop(SqStack S,char &c);void Push(SqStack &S,char c);void Pop(SqStack &S,char &c);定义主函数以及以上函数的实现:
main(){SqStack s;InitStack(s);Push(s,'a');Push(s,'b');Push(s,'c');Push(s,'d');for(char* p = s.base;p < s.top;p ++){printf("%c",*p);}char c;GetTop(s,c);printf("\nGetTop:%c\n",c);Pop(s,c);printf("弹出栈顶元素:%c\n",c);for(char* p = s.base;p < s.top;p ++){printf("%c",*p);}}void InitStack(SqStack &S){S.base = (char *)malloc(STACK_INIT_SIZE * sizeof(char)); if(S.base == NULL) return; S.top = S.base;S.stacksize = STACK_INIT_SIZE;}void GetTop(SqStack S,char &c){if(S.base == S.top) return;c = * --S.top; //*(S.top--),括号无效 }void Push(SqStack &S,char c){if(S.top - S.base >= S.stacksize){ //栈满,需再分配 S.base = (char *)realloc(S.base,(S.stacksize + STACKINCREMENT) * sizeof(char)); if(S.base == NULL) return; //内存空间分配失败 S.top = S.base + S.stacksize; //防止误操作将栈顶指针移到天上去 S.stacksize = S.stacksize + STACKINCREMENT;}*S.top ++ = c;}void Pop(SqStack &S,char &c){if(S.base == S.top) return; //栈空c = * --S.top; }运行结果:
1 0
- 数据结构(c)——栈
- 数据结构——顺序栈(c++)
- 数据结构——链式栈(c++)
- Linux C 数据结构——栈
- C语言数据结构——栈
- Linux C 数据结构——栈
- 数据结构——栈(c语言)
- 数据结构(c)——队列
- 数据结构C——单链表
- 数据结构——栈——括号匹配(c++)
- 数据结构——栈——迷宫(c++)
- 数据结构C语言实现系列[2]——栈
- 数据结构C语言实现系列[2]——栈
- 数据结构——链栈的实现(C语言)
- 数据结构——顺序栈(C语言实现)
- [150421][C++]数据结构复习——栈实现源码
- 数据结构C 语言描述——实现栈的基本功能
- 数据结构(三)——栈(C语言实现)
- Ubuntu 14.04 配置 gitosis 和 gitweb
- Android中ViewPager的使用(二):实现图片轮播效果
- 《啊哈算法》第二章 栈,队列,链表
- 《Hadoop基础教程》之初识Hadoop
- Verilog-testbench笔记
- 数据结构(c)——栈
- SQL Server 存储过程
- 如何发布一个Python命令行工具
- pregel 与 spark graphX 的 pregel api
- 主外键关联取出主键时报错[org.hibernate.LazyInitializationException] could not initialize proxy - no Session
- FFmpeg:'UINT64_C' was not declared in ths scope
- sdut 2886 Weighted Median 结构体
- Spark组件之SparkR学习3--使用spark-submit向集群提交R代码文件data-manipulation.R
- Simple, Piso, Icofoam等不可压求解器