[数据结构]栈、队列和散列表

参考:《漫画算法-小灰的算法之旅》

目录​​​​​​​

1.栈

1.1栈的定义

1.2栈的基本操作

1.3栈的应用

2.队列

2.1队列的定义

2.2队列的基本操作

2.3队列的应用

3.散列表


栈和队列这两者属于逻辑结构,他们的物理实现既可以利用数组也可以使用链表完成。

1.栈

1.1栈的定义

栈是一种线性数据结构,栈中的元素只能先进后出,最早进入的元素存放的位置叫做栈底,最后进入的元素存放的位置叫做栈顶。栈用数组和链表的实现如下:

1.2栈的基本操作

1、入栈:入栈操作就是把新元素放入栈中,只允许从栈顶一侧放入元素,新元素的位置将会成为新的栈顶。

2、出栈:出栈操作就是把与元素从栈中弹出,只有栈顶的元素才允许出栈,出栈元素的前一个元素会成为栈顶。

——>入栈和出栈的时间复杂度都是O(1)。

1.3栈的应用

栈的输出顺序和输入顺序相反,所以栈通常用于对“历史”的回溯,也就是逆流而上追溯“历史”。例如实现递归的逻辑,就可以用栈来代替,因为栈可以回溯方法的调用链。

 栈还有一个著名的应用场景是面包屑导航,使用户在浏览页面是可以轻松地回溯到上一级或更上一级页面。

2.队列

2.1队列的定义

队列也是一种线性数据结构,队列中的元素只能先进先出,队列的出口段叫做队头,队列的入口段叫做队尾。队列用数组和链表的实现如下:

2.2队列的基本操作

1、入队:入队就是把新元素放入队列中,只允许在队尾的位置放入元素,新元素的下一个位置将会成为新的对尾。

2、出队:出队就是把元素移出队列,只允许在队头一侧移出元素,出队元素的后一个元素会成为新的队头。

——>入队和出对的时间复杂度都是O(1)。

2.3队列的应用

队列的输出顺序和输入顺序相同,所以队列通常用于对“历史”的回放,也就是按照历史的顺序,把历史重演一遍。例如在多线程中,争夺公平锁的等待队列,就是按照访问顺序决定线程在队列中顺序。

3.散列表

散列表也叫做哈希表,这种数据结构提供了键(key)和值(value)的映射关系。只要给出一个key,就可以查找它所匹配的value,时间复杂度接近于O(1)。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值