线性表之链栈

来源:互联网 发布:mac的ps和windows 编辑:程序博客网 时间:2024/06/11 08:07

基本思想:在单链表的基础上,限制某些操作,使之成为一种新的数据结构。只准在栈顶(单链表的第一个元素)进行操作。

优点:内存是动态分配的。

缺点:也是代码相对来说较为复杂。(比单链表简单很多)

C代码实现下载
C++代码实现下载
java代码实现下载
(备用下载地址)

我看有些书,都是定义两个结构体,我觉得这样反而让人头晕,转不过来,本来栈结构和队列结构就是数据结构中最简单的,没必要搞那么复杂。所以,我在单链表的基础上,只实现了入栈(相当于头添加),出栈(相当于删除节点),获取栈顶元素(相当于获取第一个节点,head->next)等功能。现在问题来了,用什么当作栈顶指针?当然是头节点了,这个就是现成的一直指向栈顶(第一个节点)的指针了。然后还有一个问题,用什么记录栈的大小呢?还记得head的数据域data是没有用到的吗?所以现在就是物尽其用的时候,直接利用head->data来记录栈的大小。如果是C++或者JAVA的话,记录栈大小就直接用一个成员变量就好。

实现的功能:
1.void InitStack(); 初始化栈


1).创建栈顶指针 top = new Node(); (就是头节点)
2).初始化栈大小 top->data = 0;

2.bool IsEmpty(); 栈是否为空

根据top->data的值来判断

3.int GetSize(); 获取当前栈的长度

直接返回top->data

4.void Push(T e); 入栈

就是头添加
示例代码:

    Node<T>* node = new Node<T>(m_initValue);  //创建一个新的节点    node->data = e;    node->next = m_top->next;      m_top->next = node;          //让栈顶指针指向新的栈顶节点    ++m_count;

5.void Pop(); 出栈(不返回栈顶元素)

就是删除第一个节点

6.T PopE(); 出栈(返回栈顶元素)

7.T GetTop(); 获取栈顶元素

直接返回top->next->data

8.void Print(); 遍历栈

和单链表一样

9.void ClearStack(); 清空栈

挨个出栈就清空完了

线性表之顺序栈
线性表之双向链表
线性表之循环链表
线性表之单链表
线性表之顺序表

0 0
原创粉丝点击