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