栈与队列——Linux C编程一站式学习

数据结构的概念

数据结构是数据的组织方式。程序中用到的数据都不是孤立的,而是有相互联系的,根据访问数据的需求不同,同样的数据可以有多种不同的组织方式。
数据的组织方式包含了存储方式和访问方式这两层意思,二者是紧密联系的。比如说数组元素的存储空间是连续的。

堆栈

堆栈也是一组数据的集合,它的访问规则限制为Push(入栈)、Pop(出栈)两种操作。
对于栈而言,先压栈的元素后出栈、后压栈的元素后先栈,因此堆栈这种数据结构的特点可以概括为LIFO(Last In First Out,后进先出)。

深度优先搜索(DFS)

深度优先算法即在已知空间中,搜索出所有可能的结果,for循环也可以达到同样的效果,但是它的时间的复杂度远高于深度优先算法。
深度优先算法的核心是递归操作,需要借助一个递归工作栈,所以它的空间复杂度是O(N)
其思想为:解决当下该如何做,下一步进行重复该操作。深度优先搜索是一条道走到黑,出现不满足条件的就回溯,而出现满足条件的就继续。

队列和广度优先搜索(BFS)

队列也是一组元素的集合,也提供两种基本操作:Enqueue(入队)将元素添加到队尾,Dequeue(出队)从队头取出元素并返回。就像排队买票一样,先来先服务,先入队的人也是先出队的,这种方式称为FIFO(First In First Out,先进先出)。

广度优先搜索每次都从各个方向探索一步,向前推进一步。广度优先搜索可以找到从起点到终点的最短路径,而深度优先搜索找到的不一定是最短路径。
广度优先搜索的缺点出来了:在树的层次较深&子节点数较多的情况下,消耗内存十分严重。广度优先搜索适用于节点的子节点数量不多,并且树的层次不会太深的情况。

环形队列

如果需要使用队列出队元素位置,可以考虑使用环形队列。
环形队列: 把queue数组想像成一个圈,head和tail指针仍然是一直增大的,当指到数组末尾时就自动回到数组开头,从head到tail之间是队列的有效元素,从tail到head之间是空的存储位置,如果head追上tail就表示队列空了,如果tail追上head就表示队列的存储空间满了。
环形队列

发布了39 篇原创文章 · 获赞 4 · 访问量 1122

猜你喜欢

转载自blog.csdn.net/qq_41403559/article/details/104296862