数据结构之栈、队列

1、是什么

栈是一种操作受限的线性表,只允许在一端删除和添加数据。

2、为什么

特定的数据结构是对特定使用场景的抽象,数组和链表暴露的接口太多,操作灵活自由,但是使用起来不可控,容易出错。

3、怎么实现

栈可以数组和链表实现。数组实现叫做顺序栈,链表实现叫做链式 栈。存储数据只需要大小为n的数组就够了,出栈和入栈过程中,只需要一两个临时变量存储空间,空间复杂度是O(1)。出栈和入栈时间复杂度都是O(1)。支持动态扩容的顺序栈,入栈最 好情况时间复杂度是O(1),最坏O(n),平均时间复杂度是O(1).均摊时间复杂度一般都是最好情况时间复杂度。

一、自身特点

先进后出、后进先出。

二、适合解决的问题

某个数据集合只涉及在一端插入和删除数据,并且满足后进先出、先进后出的特性,用栈这种数据结构。

三、实际的应用场景

函数调用、表达式求值、括号匹配

队列

1、是什么

队列是一种操作受限的线性表,入队放一个元素到对尾,出队从队列头部取一个元素。

2、为什么

特定的数据结构是对特定使用场景的抽象,数组和链表暴露的接口太多,操作灵活自由,但是使用起来不可控,容易出错。

3、怎么实现

队列可以数组和链表实现。数组实现叫做顺序队列,链表实现叫做链式队列。出队和入栈时间复杂度都是O(1)。基于链表实现方法,入队tail->next=new_node,tail=tail->next.

数组实现队列时tail=n,会数据搬移,这样入队操作性能会受影响。把数组的首尾相连就是循环队列。写循环队列的实现需要注意的是队空head=tail和队满(tail+1)%n=head的判定条件。队满时,tail指向的位置实际是不存储数据的,所以会浪费一个数组的存储空间。

一、自身特点

先进先出,在对尾插入插入元素,在对头删除元素。

二、适合解决的问题

线程池请求排队,用于任何有限资源池,用于排队请求。对于大部分资源有限的场景,没有空闲资源时,基本都可以用“队列”这种数据结构来实现请求排队。

三、实际的应用场景

应用广泛,特别是一些有特定额外特性的队列,比如循环队列、阻塞队列、并发队列。在很多偏底层系统、框架、中间件的开发中,起关键作用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值