数据结构入门:栈的实现(后进先出的原则)
首先,栈是一种特殊的线性表,只允许在固定的一端进行插入和删除元素的操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。
压栈:指数据的插入操作(入数据在栈顶)。
出栈:指数据的删除操作(出数据也在栈顶)。栈的实现:一般可以用数组或者链表,但是用数组实现更优一点,因为数组在尾插尾删上的代价较小。
下面,我们来实现支持动态增长的栈:
typedef int STDataType;
/top永远指向栈顶元素,top可以反映出栈的元素的个数
typedef struct Stack{STDataType* _a;int _top;int _capacity;
}Stack;/初始化时,可以不给数组开空间,可以直接在插入数据的时候进行数组空间的开辟和增容的考虑
void StackInit(Stack* ps){assert(ps);ps->_a = NULL;ps->_capacity = 0;ps->_top = 0;
}void StackDestory(Stack* ps){assert(ps);free(ps->_a);ps->_capacity = 0;ps->_top = 0;
}/增容时要考虑到capacity为0的情况
/一般以2倍速增容
void StackPush(Stack* ps, STDataType x){assert(ps);if (ps->_top == ps->_capacity){if (ps->_capacity == 0){ps->_capacity = 10;}else{int newcapacity = 2 * ps->_capacity;ps->_capacity = newcapacity;}/realloc:用来追加数组空间!!!!ps->_a = (STDataType*)realloc(ps->_a,sizeof(STDataType)*ps->_capacity);}ps->_a[ps->_top++] = x;
}void StackPop(Stack* ps){assert(ps);/要保证栈里有元素if (ps->_top > 0){ps->_top--;}else{return;} }/取栈顶元素(千万不要忘了,数组的下标从0开始!!)
STDataType StackTop(Stack* ps){assert(ps);return ps->_a[ps->_top-1];
}int StackEmpty(Stack* ps){assert(ps);if (ps->_top == 0){return 1;}else{return 0;}
}int StackSize(Stack* ps){assert(ps);return ps->_top;
}void StackPrint(Stack* ps){assert(ps);//非空while (StackEmpty(ps) != 1){printf("%d ", StackTop(ps));StackPop(ps);}printf("\n");
}
数据结构入门:栈的实现(后进先出的原则)相关推荐
- 数据结构之 栈和队列
一.栈 1.描叙 栈和队列是计算机中基本的两个数据结构,栈可以达到后进先出,队列可以先进先出.在实际应用上,我们可以使用栈进行逆序遍历链表,非递归中序遍历二叉树,括号匹配,函数调用等等:可以使用队列对 ...
- 【数据结构入门】栈(Stack)的实现(定义、销毁、入栈、出栈等) | 图解数据结构,超详细哦~
文章目录 (1)前言 1)栈的概念 2)进栈出栈的形式 3)栈的存储结构 (2)栈的实现(顺序栈) 1)栈的定义 2)栈的初始化 3)栈的销毁 4)入栈 5)出栈 6)检测栈是否为空 7)获取栈中有效 ...
- Java数据结构(1.1):数据结构入门+线性表、算法时间复杂度与空间复杂度、线性表、顺序表、单双链表实现、Java线性表、栈、队列、Java栈与队列。
数据结构与算法入门 问题1:为什么要学习数据结构 如果说学习语文的最终目的是写小说的话,那么能不能在识字.组词.造句后就直接写小说了,肯定是不行的, 中间还有一个必经的阶段:就是写作 ...
- c++怎么实现数字数组的删除数字_C/C++数据结构:栈结构解析,最简单解析,让你一遍就会...
上一章节针对于C语言最基本的数据结构链式结构体做了解析,不清楚的可以回顾一下.本章节主要针对于C语言的基础数据结构栈做以解析. 数据结构之栈 栈(stack)又名堆栈,它是一种运算受限的线性表.限定仅 ...
- C语言【数据结构】栈和队列【OJ题(C++)、选择题】
目录 一.OJ题 1.225. 用队列实现栈 2.232. 用栈实现队列 3.622. 设计循环队列 4.20. 有效的括号 二.选择题 1.下列关于栈的叙述正确的是(B) 2.一个栈的入栈序列为AB ...
- c语言堆栈基本代码入栈出栈_C语言实现常用数据结构:栈-顺序栈实现(第6篇)...
栈 栈是一种特殊的线性表,其特性是仅能在表尾进行插入或删除的操作,栈中元素的操作是按照后进先出的原则进行,因此栈又称为后进先出线性表(Last In First Out,LIFO数据结构).栈顶:表尾 ...
- 数据结构:栈「详解」
目录 一,栈的定义 二,栈的基本操作 1,顺序栈 1.1顺序栈的基本概念 1.2顺序栈的基本操作 2,链栈 2.1链栈的基本概念 2.2链栈的种类 2.3链栈的基本操作 三,栈的应用 1,函数递归调用 ...
- #问题求解与方程# 实验三 F 数据结构之栈的应用
数据结构之栈的应用 发布时间: 2018年4月2日 20:47 时间限制: 1000ms 内存限制: 128M 描述 对于每一位学计算机的孩纸来说,数据结构(Data Structure)无疑 ...
- 【数据结构】栈和队列详细分析(全)
目录 1.前言 2.栈的定义与特点 2.1顺序栈的定义 2.2顺序栈的操作 2.3链栈的定义 2.4链栈的操作 3.队列的定义与特点 3.1循环队列 3.2循环队列的操作 3.3链队的定义 3.4链队 ...
- c++数据结构队列栈尸体_一本正经的聊数据结构(3):栈和队列
前文传送门: 「一本正经的聊数据结构(1):时间复杂度」 「一本正经的聊数据结构(2):数组与向量」 引言 前一篇内容我们介绍了数组和向量,虽然说向量是数组的一个升级版,但是在另一个维度上,他们都属于 ...
最新文章
- windows下pycharm远程调试pyspark
- Interview:算法岗位面试—10.10下午—上海某银行算法岗位(偏数据分析,四大行之一)的技术面—关于项目的考察
- 多重for循环如何提速
- javascript实例_网页空降与抖动
- php 开发框架 (资料收集)
- malloc calloc realloc
- 政府 开源软件_为什么不是所有的政府软件都是开源的?
- php限制注册频率,php如何限制某个ip提交的次数
- python持久层框架_SQLAlchemy
- 如何使用模板生成多个页面_Divi不再只是页面构建器。 使用主题生成器,可以完全设计整个网站。...
- JavaScript中的两个等号(==)和三个等号(===)
- html5 机构化元素
- VMware与宿主机同一网段
- RXJAVA之Subject
- 软件测试中的二八定律到底是什么?
- 数字电路技术基础-1-补码
- 青鸟BCNT-网络信息安全工程师
- mac抹掉磁盘重装系统未能与服务器取得联系_苹果笔记本怎么重装系统
- python调用word报错,提示“服务器运行失败”,现已解决
- 定编定岗定员方案_[转载]定岗、定编、定员实施方案 (讨论稿)