嵌入式学习---栈,队列

一. 栈(Stack)
1.1 概念
栈:是一种特殊的线性表,只允许在固定的一端插入或者删除元素,一个栈包含了栈顶和栈底。只能在栈顶插入或者删除元素。栈的底层是由数组实现的。

栈遵循先入后出原则,也就是先插入的元素得到后面才能删除,后面插入的元素比先插入的元素要更早的删除。可以理解成:后进先出

入栈:在栈顶插入元素。

出栈:在栈顶删除元素。

优点:
1.后进先出(LIFO)
:这是栈的主要优点,它允许最后加入的元素最先被移除。这种特性在处理递归调用、函数调用栈、撤销操作等场景中非常有用。

2.操作简单:栈的主要操作只有两种——入栈(push)和出栈(pop),以及可能的查看栈顶元素(peek/top)操作。这些操作都非常直观且易于实现。

3.空间利用率高:在栈的实现中,特别是使用数组实现的栈,可以很好地利用连续的内存空间,减少内存碎片。

缺点:
1.功能受限:
栈只能在一端进行插入和删除操作,这限制了它的应用场景。在需要两端操作或随机访问元素的场景中,栈并不是最佳选择。

2.可能产生溢出:如果栈的存储空间有限,而元素又不断被压入栈中,那么栈可能会因为空间不足而溢出,导致程序出错。

3.遍历效率低:栈的遍历通常需要额外的空间来保存遍历过程中的元素,因为栈的后进先出特性使得遍历过程与元素的自然顺序相反。

二.队列(Queue)

优点:
1.先进先出(FIFO)
:队列保证了元素的入队顺序和出队顺序一致,这使得它在处理需要按顺序处理的任务时非常有用,如任务调度、消息队列等。

2.灵活性高:队列可以在两端进行操作(入队和出队),这使得它在某些场景下比栈更加灵活。

3.高效处理并发任务:在多线程或并发编程中,队列常被用作任务队列,以高效地分配和处理任务。

缺点:
1.可能产生假溢出:
在使用数组实现的队列中,如果队列的尾部已经到达数组的末尾,但数组的前部仍有空闲空间,此时队列将无法继续入队,产生假溢出。虽然可以通过循环队列等方式解决,但增加了实现的复杂度。

2.空间利用率可能不高:特别是在使用数组实现的队列中,如果队列的长度远小于数组的长度,那么数组的大部分空间将被浪费。虽然链表实现的队列可以动态地分配和释放内存,但在某些情况下可能不是最高效的选择。

3.遍历可能不是最高效:虽然队列的遍历通常比栈更简单(因为不需要额外的空间来保存遍历过程中的元素),但在某些情况下(如需要频繁遍历队列),队列的遍历效率可能不是最优的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值