• 首先,栈是一种特殊的线性表,只允许在固定的一端进行插入和删除元素的操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。
    压栈:指数据的插入操作(入数据在栈顶)。
    出栈:指数据的删除操作(出数据也在栈顶)。

  • 栈的实现:一般可以用数组或者链表,但是用数组实现更优一点,因为数组在尾插尾删上的代价较小。

  • 下面,我们来实现支持动态增长的栈:

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. 数据结构之 栈和队列

    一.栈 1.描叙 栈和队列是计算机中基本的两个数据结构,栈可以达到后进先出,队列可以先进先出.在实际应用上,我们可以使用栈进行逆序遍历链表,非递归中序遍历二叉树,括号匹配,函数调用等等:可以使用队列对 ...

  2. 【数据结构入门】栈(Stack)的实现(定义、销毁、入栈、出栈等) | 图解数据结构,超详细哦~

    文章目录 (1)前言 1)栈的概念 2)进栈出栈的形式 3)栈的存储结构 (2)栈的实现(顺序栈) 1)栈的定义 2)栈的初始化 3)栈的销毁 4)入栈 5)出栈 6)检测栈是否为空 7)获取栈中有效 ...

  3. Java数据结构(1.1):数据结构入门+线性表、算法时间复杂度与空间复杂度、线性表、顺序表、单双链表实现、Java线性表、栈、队列、Java栈与队列。

    数据结构与算法入门 问题1:为什么要学习数据结构          如果说学习语文的最终目的是写小说的话,那么能不能在识字.组词.造句后就直接写小说了,肯定是不行的, 中间还有一个必经的阶段:就是写作 ...

  4. c++怎么实现数字数组的删除数字_C/C++数据结构:栈结构解析,最简单解析,让你一遍就会...

    上一章节针对于C语言最基本的数据结构链式结构体做了解析,不清楚的可以回顾一下.本章节主要针对于C语言的基础数据结构栈做以解析. 数据结构之栈 栈(stack)又名堆栈,它是一种运算受限的线性表.限定仅 ...

  5. C语言【数据结构】栈和队列【OJ题(C++)、选择题】

    目录 一.OJ题 1.225. 用队列实现栈 2.232. 用栈实现队列 3.622. 设计循环队列 4.20. 有效的括号 二.选择题 1.下列关于栈的叙述正确的是(B) 2.一个栈的入栈序列为AB ...

  6. c语言堆栈基本代码入栈出栈_C语言实现常用数据结构:栈-顺序栈实现(第6篇)...

    栈 栈是一种特殊的线性表,其特性是仅能在表尾进行插入或删除的操作,栈中元素的操作是按照后进先出的原则进行,因此栈又称为后进先出线性表(Last In First Out,LIFO数据结构).栈顶:表尾 ...

  7. 数据结构:栈「详解」

    目录 一,栈的定义 二,栈的基本操作 1,顺序栈 1.1顺序栈的基本概念 1.2顺序栈的基本操作 2,链栈 2.1链栈的基本概念 2.2链栈的种类 2.3链栈的基本操作 三,栈的应用 1,函数递归调用 ...

  8. #问题求解与方程# 实验三 F 数据结构之栈的应用

    数据结构之栈的应用 发布时间: 2018年4月2日 20:47   时间限制: 1000ms   内存限制: 128M 描述 对于每一位学计算机的孩纸来说,数据结构(Data Structure)无疑 ...

  9. 【数据结构】栈和队列详细分析(全)

    目录 1.前言 2.栈的定义与特点 2.1顺序栈的定义 2.2顺序栈的操作 2.3链栈的定义 2.4链栈的操作 3.队列的定义与特点 3.1循环队列 3.2循环队列的操作 3.3链队的定义 3.4链队 ...

  10. c++数据结构队列栈尸体_一本正经的聊数据结构(3):栈和队列

    前文传送门: 「一本正经的聊数据结构(1):时间复杂度」 「一本正经的聊数据结构(2):数组与向量」 引言 前一篇内容我们介绍了数组和向量,虽然说向量是数组的一个升级版,但是在另一个维度上,他们都属于 ...

最新文章

  1. windows下pycharm远程调试pyspark
  2. Interview:算法岗位面试—10.10下午—上海某银行算法岗位(偏数据分析,四大行之一)的技术面—关于项目的考察
  3. 多重for循环如何提速
  4. javascript实例_网页空降与抖动
  5. php 开发框架 (资料收集)
  6. malloc calloc realloc
  7. 政府 开源软件_为什么不是所有的政府软件都是开源的?
  8. php限制注册频率,php如何限制某个ip提交的次数
  9. python持久层框架_SQLAlchemy
  10. 如何使用模板生成多个页面_Divi不再只是页面构建器。 使用主题生成器,可以完全设计整个网站。...
  11. JavaScript中的两个等号(==)和三个等号(===)
  12. html5 机构化元素
  13. VMware与宿主机同一网段
  14. RXJAVA之Subject
  15. 软件测试中的二八定律到底是什么?
  16. 数字电路技术基础-1-补码
  17. 青鸟BCNT-网络信息安全工程师
  18. mac抹掉磁盘重装系统未能与服务器取得联系_苹果笔记本怎么重装系统
  19. python调用word报错,提示“服务器运行失败”,现已解决
  20. 定编定岗定员方案_[转载]定岗、定编、定员实施方案  (讨论稿)

热门文章

  1. Android高级面试题精选
  2. DDoS防御的8种方针详解
  3. HTML制作一个介绍自己家乡的网站——贵阳,排版整洁,内容丰富,主题鲜明
  4. svn查看ip linux,查看svn服务器的ip地址
  5. 基于HDP使用Flume实时采集MySQL中数据传到Kafka
  6. cmd窗口的内容加上颜色
  7. Servlet知识概括详解
  8. 泰坦尼克号生存预测(超详细)
  9. 三跨考研浙江大学计算机,“三跨”考研的焦虑 你能承受多少
  10. 牛客网-《刷C语言百题》第三期