数据结构

数据结构

生动的介绍数据结构的一篇文章

一个家族为数据结构,我的家族是一个庞大的家族。家族中也有几大分支,比如说树、图、堆、散列表等。各个分支都有不同的能力,所以很多人选择适当的数据结构是一项很重要的工作。我们家族和算法家族是世交,基本上所有重要场合两家都会一起出现。

- 我叫,我的爸爸叫数组,我的妈妈叫链表,我的双胞胎弟弟叫队列。我们这个家庭是整个数据结构家族中比较重要的家庭。

数组

说起我的爸爸——数组,他是数据结构家族的族长,人们都说他是数据结构大家族的根基。很多编程语言都内置数组。

数组在存储数据的时候会预先划分一块连续的内存 , ++然后把数据按顺序存储到这些连续的内存中,当取数据的时候,需要给数组提供数据,就是数组的位置索引++。并不是所有的数据数组都会存储,只会存储相同类型的数据

这里写图片描述

数组数据结构是由相同类型的元素(element)的集合所组成的数据结构,分配一块连续的内存来存储。利用元素的索引(index)可以计算出该元素对应的存储地址。

所有的数据结构都支持 插入, 删除 ,读取

因为数组在存储数据的时候,是按照顺序保存的, 特点就是读取数据比较快,直接根据索引去查找, 而插入和删除比较慢, 因为不管是插入还是删除, 只要操作数组中的其中一个位置,那个位置后面的位置的所有数据的索引都要逐一去罗移位置

这里写图片描述


链表

由于数组爸爸有寻址容易,插入和删除困难的问题,他在找老婆的时候特意找了一个和自己互补的姑娘——链表。

链表就是查找慢,插入和删除快

链表存储数据是有两块区域的,一块是存储数据, 一块是用来记录数据保存的指针。 这样存储数据的时候,他直接去找空余的空间,然后存储数据,然后再把上一个数据指针指到这个数据的地址值

这里写图片描述

链表是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里保存着下一个节点的指针。

这样的保存数据方式就使插入和删除数据的时候非常快, 只需要修改指针的下一个值的地址值就好,然后查找数据的时候,只能从头找到尾,所以特别慢

这里写图片描述


栈 和 队列

我和队列是一堆孪生兄弟。我们两个都可以用数组和链表来实现。虽然是双胞胎,但是我们两个都是有性格的,我们要求别人存储数据和取出数据的顺序要按照我们的规矩来。

: 先进后出

这里写图片描述

队列 : 先进先出

这里写图片描述

我给你举个例子你就明白了,我和弟弟每个人都有一个管子,用来帮你们保存数据,当然这个管子可能是用数组爸爸是实现的也可能是链表妈妈实现的。我们握住管子的两头,我的这个管子只能通过管子左面的口子放入东西,也只能从左面的口子取出东西。右面的口子是不开的。而弟弟队列呢,他的管子的左面的口子放东西,管子的右面的口子取东西。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值