数据结构中栈的实现以及其基本操作
来源:互联网 发布:java圆类 编辑:程序博客网 时间:2024/05/17 03:55
栈和队列是两种特殊的线性表,它们限定只能在表的一端进行删除、插入元素等运算。对于栈,通常称固定插入、删除的一端为栈顶(Top),而另一端称为栈底(Bottom)。位于栈顶和栈低的元素分别称为顶元和底元。当表中没有元素时,则称为空栈。由于栈只能在栈顶进行操作,因此栈遵循后进先出的原则,栈又被称为后进先出表(LIFO——Last In First Out)。在计算机程序设计中,函数的嵌套调用和递归调用时借用栈来控制返回地址的。
栈和线性表类似,也可以利用动态数组来进行描述顺序栈的存储结构,如下所示:
#define stack_init_size 100#define stackincrement10#define elementypeinttypedef struct sqstack{elementype*base;//栈底指针;elementype*top;//栈顶指针;intstacksize;//当前已分配的空间,以栈元素个数为单位;} sqstack;1、栈的初始化是在内存中动态分配一块连续的存储区域,并且指定栈顶指针top与栈底指针base相等。栈顶指针top始终比顶元超前一个位置,因此栈满的条件是
top-base=stacksize。栈的初始化函数如下:
//构造空栈;int stackInit(sqstack &s){s.base=(elementype*)malloc(stack_init_size*sizeof(elementype));if(!s.base){return 0;}s.top=s.base;s.stacksize=stack_init_size;return 1;}2、栈顶取元素,由于栈的top指针超前顶元,故栈顶取元素取得是栈顶指针指向的下一个元素,如下:
//从栈顶取元素;int getTop(sqstack& s,elementype &e){if(s.base==s.top)//栈为空;{return 0;}e=*(s.top-1);return 1;}3、插入元素,栈中插入一个元素,是把元素插入到栈顶,并且栈顶指针top需要向上偏移,如果已经是满栈,则需要再次申请内存,以防止栈顶溢出的情况发生。如下:
//插入元素;int push(sqstack &s,elementype e){int size=s.top-s.base;if((s.top-s.base)>=s.stacksize) //若栈满,则追加存储空间;{s.base=(elementype*)realloc(s.base,(s.stacksize+stackincrement)*sizeof(elementype));if(!s.base){return 0;}s.top=s.base+s.stacksize*sizeof(elementype);s.stacksize+=stackincrement;}*(s.top++)=e;return 1;}
4、删除元素,删除元素则需要把栈顶指针向下偏移。
int Pop(sqstack&s,elementype& e){if(s.top==s.base){return 0;}e=*(--s.top);return 1;}
5、判断栈是否为空,只需要判断栈顶指针是否和栈底指针相等即可。
//判断栈是否为空;int stackempty(sqstack s){if(s.base==s.top){return 1;}return 0;}
6、清空栈,只需设置栈顶指针与栈底指针相等即可。
//清空栈;void stackclear(sqstack &s){s.top=s.base;}
0 0
- 数据结构中栈的实现以及其基本操作
- 【 数据结构】实现二叉树以及其基本操作
- 数据结构-栈的基本操作实现
- 数据结构-共享栈的基本操作实现
- js 对象以及其基本操作
- 数据结构(5)--栈的定义以及相关操作的实现
- 算法与数据结构-栈的基本操作C语言实现
- 数据结构 P46-47 算法实现 顺序栈的基本操作
- 【数据结构】 栈的基本操作
- 数据结构栈的基本操作
- 栈的基本操作-数据结构
- 【数据结构】栈的基本操作
- [数据结构]栈的基本操作
- 数据结构--栈的基本操作
- 数据结构--栈的基本操作
- 数据结构:栈的基本操作
- 数据结构-栈的基本操作
- 数据结构--栈的基本操作
- 【Laravel】安装配置开发环境
- 请求转发与响应重定向
- 讲讲c++ Session 5:成员对象(Member objects)和封闭类(Enclosing class)
- Codeforces Round #277.5 (Div. 2) A
- uva 753(最大流)
- 数据结构中栈的实现以及其基本操作
- 银行系统加强版
- 设置 webkit 背景透明的几种办法
- UIScrollView
- JPA关联映射 - 一对一映射
- spring与mybatis三种整合方法
- 正则表达式
- php使用memcache提高性能
- Android中用于耗时的一个程序分析(利用ProgressDialog)