算法不会,尚能饭否之栈
栈的应用,不用我多说了,在编程中,栈是一个很有用的数据结构,但是你亲 手实现过它吗?我有段时间和群里的人聊天,他们都很厉害的,你知道的,就是那 种的。我问他们会用栈吗?口水战就开始了,他们都不削,说太简单了,我就说你 们亲手自己实现过栈的各种功能吗?有的说实现过,有的说没有,有人说我早就不 自己实现了,都是直接用 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
算法不会,尚能饭否之栈相关推荐
- 学习JavaScript数据结构与算法(一):栈与队列
本系列的第一篇文章: 学习JavaScript数据结构与算法(一),栈与队列 第二篇文章:学习JavaScript数据结构与算法(二):链表 第三篇文章:学习JavaScript数据结构与算法(三): ...
- python中栈的描述是_数据结构与算法:Python语言描述 栈和队列.ppt
数据结构与算法:Python语言描述 栈和队列 迷宫问题 迷宫问题的特点: 存在一集可能位置,一些位置相互连通,一步可达 一个位置可能连通若干位置,出现向前探查的多种可能(有分支) 目标是找到一条路径 ...
- 算法:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。...
算法:用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型.<剑指offer> 利用栈来进行操作,代码注释写的比较清楚:首先判断两个栈是否是空的:其次当栈二 ...
- Python数据结构与算法(3.1)——栈
Python数据结构与算法(3.1)--栈 0. 学习目标 1. 栈的基本概念 1.1 栈的基本概念 1.2 栈抽象数据类型 1.3 栈的应用场景 2. 栈的实现 2.1 顺序栈的实现 2.2 链栈的 ...
- DSt:数据结构的最强学习路线之数据结构知识讲解与刷题平台、刷题集合、问题为导向的十大类刷题算法(数组和字符串、栈和队列、二叉树、堆实现、图、哈希表、排序和搜索、动态规划/回溯法/递归/贪心/分治)总
DSt:数据结构的最强学习路线之数据结构知识讲解与刷题平台.刷题集合.问题为导向的十大类刷题算法(数组和字符串.栈和队列.二叉树.堆实现.图.哈希表.排序和搜索.动态规划/回溯法/递归/贪心/分治)总 ...
- 【左程云Java算法】Chapter1-5:用一个栈实现另一个栈的排序
[左程云Java算法]Chapter1-5:用一个栈实现另一个栈的排序 [题目] 用一个栈实现另一个栈的排序 [要求] 一个栈中元素的类型为整型,现在想将该栈从顶到底按从大到小的顺序排序,只许申请一个 ...
- 算法图解part3:递归栈
算法图解part3:递归&栈 1.什么是递归 2.基线条件和递归条件 3.递归与循环 4.栈(Stack) 4.1调用栈 4.2递归调用栈 5.总结 6.参考资料 1.什么是递归 百度百科 程 ...
- 代码随想录算法训练Day11 LeetCode232. 用栈实现队列(模拟);225.用队列实现栈(模拟);20. 有效的括号(栈应用);1047. 删除字符串中的所有相邻重复项(栈应用)
代码随想录算法训练Day11 | LeetCode232. 用栈实现队列(模拟):225.用队列实现栈(模拟):20. 有效的括号(栈应用):1047. 删除字符串中的所有相邻重复项(栈应用) 关于栈 ...
- 实现顺序栈的各种基本运算的算法C语言,实现顺序栈的各种基本运算的算法
试编写一个算法,让两个顺序栈共用一个数组stack[N]试编写一个算法,让两个顺序栈共用一个数组stack[N],分别实现入栈\出栈操要2个栈公用一个存储空间看来栈顶指针只能从两端开始了(和队列有点像 ...
最新文章
- IOS开发 使用CGContextRef绘制文字时的设置
- 什么是微分?什么是导数?如何利用微分-导数方程求导数?
- git解决“failed to push some refs to“问题
- [SpringBoot2]错误处理_默认规则
- DG导入mysql依赖包_MySql导入导出数据库(含远程导入导出)
- 云服务器BBC销售渠道,云服务器BBC控制台
- ssh整合之一spring的单独运行环境
- MySQL(26)--- 索引
- virtualBox文件共享
- 【云周刊】第163期:中国唯一,阿里云进入Forrester大数据服务榜单
- 使用Grafana搭建监控系统
- 【原创】《矩阵的史诗级玩法》连载十四:二元二次方程和圆锥曲线
- 高数第七版_习题解答_极限练习解答(第二类重要极限的多元形式)
- matlab离散系统的频率响应,离散系统频率响应和零极点分布实验报告
- Android实战之 上传头像 和仿QQ空间、微博发表文字和图片
- 解决selenium自动化测试时,chrome浏览器自动关闭问题
- SSM框架学习(2)CRM项目软件开发周期
- 计算机界面视频录制软件,电脑版的录视频软件如何使用?录屏精灵为大家介绍基本操作...
- Unity与讯飞语音交互:使用aiui技能
- Glide v4详解
热门文章
- shell实战之日志脱敏
- 文件上传控件 自定义样式
- 面试常备题(三)----顺时针打印矩阵
- 【Java从0到架构师】JS_jQuery_BootStrap
- 【JavaScript 笔记 】— 基础语法(数据类型、字符串、数组、对象、Map、Set、iterable、函数基础)
- 小程序进阶学习02--安装webstorm
- 那年学过的web后端笔记
- Linux系统管理(10)——Centos8 重启网络服务 网络相关命令
- function在mysql里总是出错_如何在MySQL函数中引发错误
- 案例学习BlazeDS+Spring之二Spring BlazeDS Integration 101