数据结构笔记(五)

1好久没更新数据结构,先来几个简单的热热身。

一、热身

1.栈

从栈顶压入元素,从栈顶弹出元素,数据只有一个出入口。元素的进出顺序会是后进先出。

压入举例:stack.push(10),此时栈为[10]; stack.push(3),此时栈为[10,3];stack.push(7),此时栈为[10,3,7]

如果按刚刚的压入来弹出的话:stack.pop,结果会是7,栈会变成[10,3]

如果栈空了,则会返回nil。

当调用函数时,CPU会将函数返回地址压入到运行栈中,当这个函数执行结束时,CPU将返回地址从栈中取出,如果不断调用函数时,会得到栈溢出(stack overflow)的错误,因为CPU运行栈没有空间了。

2.队列

本质是列表,只能从队尾添加元素,从队首移除元素,先进先出。

队列举例:入队: quene.enquenue(10) ,此时队列为[10]; quene.enquenue(3), 此时队列为[10,3];

                  出队:quene.dequenue(),返回10.先进先出,此时队列为[3],往前移动一位。

一般入队的效率是很高的,o(1),但是出队会是o(n),因此对dequenue做了改进,让出队的为空,设为nil来移除,再将head的值+1,使得下一个元素变成新的队首。

3.列表

(1)链表

链表是一系列数据项,有点像数组,但是数组是分配了一大块内存,而链表是的元素在内存中是完全独立的对象,通过链接连接。

链表的元素为节点,单链表中,每个节点只有一个向下一个节点的引用(指针),双链表中,节点还有指向前一个节点的指针。开始位置,会有一个head指针的指向,链表的末尾成为tail。最后一个节点的下一个指针和前一个节点的上一个指针都为nil。

链表的大多数操作时间复杂度为o(n),比数组要慢,但是比较灵活,不需要那么多内存,复杂度主要在于寻找相应指针的过程,因为它需要从head头开始找起,但是处理起来会很快。单链表比双链表使用更少的内存,它不需要存储所有那些previous指针。双链表每个节点都有一个next和previous指针,如果没有下一个或者前一个节点,这些可以是nil。

(2)跳表

跳表是一个概率数据结构,具有相同的对数时间限制和作为AVL或红黑树的效率,并提供了一个充满的妥协有效地支持搜索和更新操作,能够用相对其他映射数据结构简单的方式来实现。

想要发一篇新博客,先未完待续。。。。。。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值