线性表之链栈

==> 学习汇总(持续更新)
==> 从零搭建后端基础设施系列(一)-- 背景介绍


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

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

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

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值