栈的应用,不用我多说了,在编程中,栈是一个很有用的数据结构,但是你亲 手实现过它吗?我有段时间和群里的人聊天,他们都很厉害的,你知道的,就是那 种的。我问他们会用栈吗?口水战就开始了,他们都不削,说太简单了,我就说你 们亲手自己实现过栈的各种功能吗?有的说实现过,有的说没有,有人说我早就不 自己实现了,都是直接用 STL 中的,我说,那你应该很厉害的。为什么我怎么说呢?

我见过的用 STL 中的人,要么就是很熟练了这些数据结构了,要么就是连最基本的栈 是怎么实现的都不知道,就是会用 STL 中的那几个函数罢了。现在你回过头来看看你 自己,你是哪种呢?即使用 STL 用的很吊,那你懂得 STL 吗?懂和会用是两个问题, 而我,一个很菜的鸟,什么都是从最底层做起的,我喜欢自己去实现每一个问题, 从中受益是很大的,同时,那些很标准的库,是工作中是必须要用的,至少没有 bug ,或者 bug 少,比自己写的强,但是自己写,那是一种所为!不是吗?而自己每 次写都有不同的收获,不是说我就在这个地步混的。呵呵!现在,我就来每一步一 步的来实现我的栈,后期,同时我也会推出 STL 的解析博文。希望大家支持,呵呵, 那都是后话了。哦,对了,将来,即使你去应聘,人家都很喜欢的问你,用过 STL , 懂得 STL 的实现吗?如果你不会,那就糟糕了。闲话少扯,进入正题。

栈,你得懂得基本东西,什么叫栈,就是所谓的“先来后出”,言简意赅吧, 先进来的元素最后出去。同时,只能由栈顶进出元素。不可否认,这是你必须会 的。如果不会了,那就糟糕透顶了,你该买豆腐去自杀了。

每个人实现自己的栈,是不同的,至少上面的那个“先来后出”是相同的。现 在来讲讲我的栈实现方法。

首先,链表实现,你要构造一个链表,对吧。每个节点都有数据域和指针域,这个不

用多说了。

// 节点结构

struct Node

{

int value;

Node *next;

};

这是节点的结构。

但是我的链表是这样实现的。我的第一个节点作为头指针,什么也不放,就是说光光就

是指向下一个节点的结构。

Head            节点1        节点2        节点3        节点4    等等……

这个就是链表的结构,而我的头指针就是直接指向第一节点的。如图, head 中的数据域不放任何数据,同时如果放入数据,那也是没有意义的。这就是用头指针建立链表。上图,节点就是栈顶。出栈就是从节点 4 开始的。

下面列出对栈的一些操作:

void Push(Node *, const int &); // 在栈顶插入, 入栈

int Pop(Node *); // 出栈

int GetTop(Node *); // 取栈顶元素

void MakeEmpty(Node *); // 置空栈

int IsEmpty(Node *)const ; // 判断栈是否为空

对栈的一些简单操作,都在这几个函数中完成。

代码贴出,仅供参考!

代码下载:http://download.csdn.net/source/3197548

转载于:https://www.cnblogs.com/JPAORM/archive/2011/04/16/2509888.html

算法不会,尚能饭否之栈相关推荐

  1. 学习JavaScript数据结构与算法(一):栈与队列

    本系列的第一篇文章: 学习JavaScript数据结构与算法(一),栈与队列 第二篇文章:学习JavaScript数据结构与算法(二):链表 第三篇文章:学习JavaScript数据结构与算法(三): ...

  2. python中栈的描述是_数据结构与算法:Python语言描述 栈和队列.ppt

    数据结构与算法:Python语言描述 栈和队列 迷宫问题 迷宫问题的特点: 存在一集可能位置,一些位置相互连通,一步可达 一个位置可能连通若干位置,出现向前探查的多种可能(有分支) 目标是找到一条路径 ...

  3. 算法:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。...

    算法:用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型.<剑指offer> 利用栈来进行操作,代码注释写的比较清楚:首先判断两个栈是否是空的:其次当栈二 ...

  4. Python数据结构与算法(3.1)——栈

    Python数据结构与算法(3.1)--栈 0. 学习目标 1. 栈的基本概念 1.1 栈的基本概念 1.2 栈抽象数据类型 1.3 栈的应用场景 2. 栈的实现 2.1 顺序栈的实现 2.2 链栈的 ...

  5. DSt:数据结构的最强学习路线之数据结构知识讲解与刷题平台、刷题集合、问题为导向的十大类刷题算法(数组和字符串、栈和队列、二叉树、堆实现、图、哈希表、排序和搜索、动态规划/回溯法/递归/贪心/分治)总

    DSt:数据结构的最强学习路线之数据结构知识讲解与刷题平台.刷题集合.问题为导向的十大类刷题算法(数组和字符串.栈和队列.二叉树.堆实现.图.哈希表.排序和搜索.动态规划/回溯法/递归/贪心/分治)总 ...

  6. 【左程云Java算法】Chapter1-5:用一个栈实现另一个栈的排序

    [左程云Java算法]Chapter1-5:用一个栈实现另一个栈的排序 [题目] 用一个栈实现另一个栈的排序 [要求] 一个栈中元素的类型为整型,现在想将该栈从顶到底按从大到小的顺序排序,只许申请一个 ...

  7. 算法图解part3:递归栈

    算法图解part3:递归&栈 1.什么是递归 2.基线条件和递归条件 3.递归与循环 4.栈(Stack) 4.1调用栈 4.2递归调用栈 5.总结 6.参考资料 1.什么是递归 百度百科 程 ...

  8. 代码随想录算法训练Day11 LeetCode232. 用栈实现队列(模拟);225.用队列实现栈(模拟);20. 有效的括号(栈应用);1047. 删除字符串中的所有相邻重复项(栈应用)

    代码随想录算法训练Day11 | LeetCode232. 用栈实现队列(模拟):225.用队列实现栈(模拟):20. 有效的括号(栈应用):1047. 删除字符串中的所有相邻重复项(栈应用) 关于栈 ...

  9. 实现顺序栈的各种基本运算的算法C语言,实现顺序栈的各种基本运算的算法

    试编写一个算法,让两个顺序栈共用一个数组stack[N]试编写一个算法,让两个顺序栈共用一个数组stack[N],分别实现入栈\出栈操要2个栈公用一个存储空间看来栈顶指针只能从两端开始了(和队列有点像 ...

最新文章

  1. IOS开发 使用CGContextRef绘制文字时的设置
  2. 什么是微分?什么是导数?如何利用微分-导数方程求导数?
  3. git解决“failed to push some refs to“问题
  4. [SpringBoot2]错误处理_默认规则
  5. DG导入mysql依赖包_MySql导入导出数据库(含远程导入导出)
  6. 云服务器BBC销售渠道,云服务器BBC控制台
  7. ssh整合之一spring的单独运行环境
  8. MySQL(26)--- 索引
  9. virtualBox文件共享
  10. 【云周刊】第163期:中国唯一,阿里云进入Forrester大数据服务榜单
  11. 使用Grafana搭建监控系统
  12. 【原创】《矩阵的史诗级玩法》连载十四:二元二次方程和圆锥曲线
  13. 高数第七版_习题解答_极限练习解答(第二类重要极限的多元形式)
  14. matlab离散系统的频率响应,离散系统频率响应和零极点分布实验报告
  15. Android实战之 上传头像 和仿QQ空间、微博发表文字和图片
  16. 解决selenium自动化测试时,chrome浏览器自动关闭问题
  17. SSM框架学习(2)CRM项目软件开发周期
  18. 计算机界面视频录制软件,电脑版的录视频软件如何使用?录屏精灵为大家介绍基本操作...
  19. Unity与讯飞语音交互:使用aiui技能
  20. Glide v4详解

热门文章

  1. shell实战之日志脱敏
  2. 文件上传控件 自定义样式
  3. 面试常备题(三)----顺时针打印矩阵
  4. 【Java从0到架构师】JS_jQuery_BootStrap
  5. 【JavaScript 笔记 】— 基础语法(数据类型、字符串、数组、对象、Map、Set、iterable、函数基础)
  6. 小程序进阶学习02--安装webstorm
  7. 那年学过的web后端笔记
  8. Linux系统管理(10)——Centos8 重启网络服务 网络相关命令
  9. function在mysql里总是出错_如何在MySQL函数中引发错误
  10. 案例学习BlazeDS+Spring之二Spring BlazeDS Integration 101