对于栈的概念、图示以及顺序栈的实现我在上一篇博客进行了讲解和代码共享。如果大家需要看顺序栈的综合操作可以看我的上一篇博客。
http://blog.csdn.net/zxnsirius/article/details/51206766
这里主要给大家讲一下链式栈的操作:
首先说一下链式栈与顺序栈的区别
- 顺序栈与链式栈的相同点。都是只能存栈顶获取或者插入元素。且二者的时间复杂度都是相同的O(1);
- 顺序栈和链式栈的不同点是,顺序栈的栈空间是静态的也就是说需要首先自动分配好,如果多了会浪费空间,少了又会怕不够用,这是顺序栈的最致命的缺点。而我们链式栈正好解决了这个问题,它采用动态分配内存空间,每当有一个元素需要进行入栈,则为该元素分配一个空间。不多不少不浪费,刚刚好。
说了这么多,那么链式栈该如何实现呢。我们可以先想一下单链表的头插。看下面的例子
/* 单链表的头插 */
1、head->null;
2、head->node1->null;
3、head->node2->node1->null;
//大家有没有发现这和我们的栈的存储方式很像?
//几乎就是栈,如果你把head想象成栈顶。null想象成栈底
/* 哈哈,就说这么多,直接看代码 */
...