Lithium中文网

OpenGPU中文网

C语言数据结构进阶之栈和队列的实现

发布日期:2025-01-04 16:22    点击次数:162

栈的实现: 一、栈的概念和性质 栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在固定的一端进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。 出栈:栈的删除操作叫做出栈。出数据也在栈顶 二、栈的实现思路 栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优一些。因为数组在尾上插入数据的代价比较小这里我们用顺序表结构来实现栈。 顺序表可以把使用的空间写成固定值,也可以构建动态开辟内存;但是如果写成固定的数组形式当存的数据满了就不能再使用了,所以下面我们实现的是动态开辟内存的形式。 所以我们先创建一个顺序表结构体类型,结构体类型中有指针,下标,容量。 指针: 用来维护在堆上连续的一段空间, 下标:表示数据存放到哪一个位置了,因为数据只能一个接着一个地存放,要有个下标来记录我数据放到哪一个位置了。 容量:与下标相比较,当下标与容量相等就表示空间存储满了,要进行扩容处理。 创建类型如下: 三、栈的相关变量内存布局图 四、栈的初始化和销毁 五、栈的接口实现: 1.入栈 2.出栈 3.获取栈顶的数据 4.获取栈的元素个数 5.判断栈是否为空 队列的实现: 一、队列的概念和性质 队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out)的性质。 队列:进行插入操作的一端称为队尾 出队列: 进行删除操作的一端称为队头 二、队列的实现思路 队列也可以数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数组头上出数据,效率会比较低。 而链表我们采用双向链接结构,一个指针来维护头节点,一个指针维护尾部节点 定义的结构体类型如下: 三、队列相关变量的内存布局图 四、队列的初始化和销毁 五、队列的接口实现: 1. 入数据 2.出数据 3.取队头数据 4.取队尾数据 5.获取队列元素个数 6.判断队列是否为空 总结 以上就是栈和队列的实现内容了,其中前面我只有把源文件Stack.c 和Queue.c拆开来分析了。如果想要栈和队列的全部内容,阔以移步到gitee上获取 【栈的源码链接,点击即可】 【队列的源码链接,点击即可】 到此这篇关于C语言数据结构进阶之栈和队列的实现的文章就介绍到这了,更多相关C语言 数据结构 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 您可能感兴趣的文章:C语言深入刨析数据结构之栈与链栈的设计与应用详解C语言数据结构之栈C语言实现通用数据结构之通用椎栈C语言编程数据结构栈与队列的全面讲解示例教程C语言编程数据结构的栈和队列C语言数据结构之使用链表模拟栈的实例C语言中栈的结构和函数接口的使用示例