它到底能有多巧妙呢,谁知道呢?哈哈,开个玩笑,我们要去学习栈和队列,我们是不是也应该去了解它的概念,那什么是栈,又什么是队列呢,那么接下来,就让我们一起看看。
1.概念
栈和队列都是线性数据结构,它们都按照元素进入的顺序排列,并且只能访问排在最前面的元素。但是它们之间也有一些不同点。
栈是一种进先出(Last In First Out, LIFO)的数据结构,它允许元素在最后插入和最早删除。栈的最后一个元素称为栈顶元素,栈顶元素可以通过栈顶指针来访问和修改栈的插入和删除操作通常在栈顶进行,因此插入和删除操作的效率比较高。(俺的理解就是,把栈可以想象成一个弹夹,先被压进去的子弹,后出来,后被压进去的子弹先出来)
队列是一种先进先出(First In First Out, FIFO)的数据结构,它允许元素在最早插入和最迟删除。队列的第一个元素称为队头元素,队头元素可以通过队头指针来访问和修改。队列的插入操作通常在队尾进行,删除操作通常在队头进行,因此队列的插入和删除操作的效率相对较低。(想听俺的理解吗,先付钱吧,其实也很容易理解,就跟做扶梯一样,先上扶梯的肯定先离开)
2.栈和队列在计算机科学中都有广泛的应用,例如:
* 栈可以用于表达式求值、函数调用、括号匹配等场景。
* 队列可以用于任务调度、缓冲池管理、消息队列等场景。
在C语言中,栈和队列可以通过自定义的数据结构实现,也可以使用标准库中的容器(如标准C库中的`std::stack`和`std::queue`)来实现。
我们了解了栈和队列,不妨写一个栈出来吧。在写之前,我们应该先了解用我们所学到的顺序表和链表那个实现好,按照栈的先进后出的特性,很明显顺序表比较更容易满足其要求,大家都应该知道链表尾删,是需要先找尾并记住它的前一个,这不利于我们出数据。
好了,既然我们明白了用什么实现,那开动
先干什么呢,嗯.......,哦!先创建结构体
聪明如我
实现那些接口呢
是不是很少,
等什么呢,先写个初始化练练手呗
接下来我们要实现,插入,删除,取栈顶数据的接口
那么好,我们来测试一下呢?
我们要打印数据,那就必须要判断栈中是否有数据,所以,我们还要写一个判断栈内是否有数据的函数。不过相信聪明的你们,应该已经想到怎么写了吧
没错就是判断栈顶是否为空就可以了,是不是很简单
如果我们要看栈中还有多少数据,又该怎么做呢
也简单,我们只需要返回栈顶就行。最后,当用完我们在堆区申请的空间,是不是要归还呀
那我们最后一个接口也完成了,那我们也来测试一下呢
到这里,我们下期再见喽