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