| |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| -> 数据结构与算法 -> 数据结构之栈(链栈)的基本操作 -> 正文阅读 |
|
|
[数据结构与算法]数据结构之栈(链栈)的基本操作 |
|
一、关于链栈的操作,它和链表有很大的相似之处,不同的是,栈只允许在栈顶进行入栈操作,和链表的头插法相同。 二、之所以要用链栈,是因为如果我们用顺序栈的话,需要提前申请一片内存空间,但是如果我们值存入少量的元素,那么这片内存空间难免会造成一定的浪费。如果使用链栈的话,我们只在入栈的时候进行内存的申请,然后再进行元素的存储,既可以进行动态的内存申请。根据实际入栈元素的多少申请所需的空间即可。 三、链栈和顺序栈的基本操作都是一样的,包括:初始化,求长度,判断栈是否为空,入栈,出栈,取栈顶元素。 (1)先定义一个结构体,这个结构体中,包括栈中每个节点的节点值data,和指向下一个栈节点的指针next
(2)进行初始化,将链栈的顶处设置一个指针,用来指向这个栈,这个指针内不存储东西,那么刚开始就把这个栈顶指针设置为NULL即可。
(3)判断栈是否为空,只需要判断栈顶指针的指针域是否为空即可。为空返回0,不为空返回1。
(4)求栈的长度,即从栈顶的下一个,也就是第一个元素开始,往下遍历,一直遍历到指针指向空,说明遍历完了,没遍历一个,就计数器加一,临时的指针变量往后移动一位p=p->next
(5)入栈,将值x,压入到栈中,我们首先声明一个指针变量,来存储这个元素值x,当然,因为我们要用这个指针变量存储东西,所以我们要先为这个指针变量申请内存空间malloc,然后存入。
(6)出栈,首先要判断栈是否为空,如果不为空,我们指针p指向栈中的第一个节点,然后用e记录下当前栈顶元素的值,接着将不存东西的栈顶指针的指针域指向指针p的下一个节点处,释放指针p即可。
(7)获取栈顶元素的值,首先要判断栈是否为空,如果不为空,直接返回栈中的第一个节点的值即可
(8)主函数,对上面定义的各个函数进行定义,这一模块的代码块,大家可以根据自己的需求自己进行定义即可,我只给出我所写的一部分
(9)我这个案例的运行结果为:
总结:有一些人在定义一个结构体的指针时,当把它传入到另外一个函数中时,不知道该如何编写,如果你在定义的时候,这个结构体的类型不是一个指针,那么你如果在主函数中定义一个结构体指针变量,传入到其他函数时,要使用双重指针**,才能进行栈的更改,我在这里刚开始就定义了一个指向结构体的指针类型,那我在声明一个结构体类型的指针时,就不需要加*,原理是一样的。如有错误,请大佬留言,如果有更好的方法,欢迎交流。 ? |
|
|
|
|
| 上一篇文章 下一篇文章 查看所有文章 |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| 360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年12日历 | -2025/12/3 17:47:12- |
|
| 网站联系: qq:121756557 email:121756557@qq.com IT数码 |