数据结构基础

数据结构基础

算法+数据结构=编程
数据结构:是指相互之间存在一种或多种特定关系的数据元素的集合。
数据结构:以某种特定的布局方式存储数据的容器。

数据存储结构:描述数据在计算机中的存储方式。
常用的数据存储方式:顺序存储、非顺序存储。
顺序存储就是把数据存储在一块连续的存储介质(数组);
非顺序存储就是各个数据不一定存在一个连续的位置上(链表):
(只要每个数据知道它前面的数据和后面的数据,就能把所有数据连续起来)。

常见的八大数据结构:数组,栈,队列,链表,树,图,堆,散列表(哈希表)

八大数据结构

一、数组

一个N维数组是受N组线性关系约束的线性表。
数组是使用一块连续的内存空间保存数据,保存的数据的个数在分配内存的时候就是确定的。
在这里插入图片描述
特点:寻址读取数据比较容易,插入和删除比较困难
1、访问数组中第n个数据的时间花费是O(1),但是在数组中查找一个一个指定的数据是O(N)
2、当向数组中插入或者删除数据,最好的情况是在数组的末尾,O(1);
最坏的情况,插入和删除第一个数据,O(N);
任意位置,插入或删除数据的时候,后面的数据全部需要移动,O(N)。

二、链表

链表在非连续的内存单元中保存数据,并且通过指针将各个内存单元链接在一起,最后一个节点的指针指向NULL。
链表不需要提前分配固定大小的存储空间,当需要存储数据的时候分配一块内存并将这块内存插入链表中。

单链表:
单链表
在链表中查找第n个数据以及查找指定的数据的时间复杂度是O(N),(需要从0号开始一个一个的找,直到找到想要的那条数据为止)
但是插入和删除数据的时间复杂度是O(1),因为只需要调整指针就可以。

在链表中插入:
在这里插入图片描述
在链表中删除:
在这里插入图片描述

三、栈

栈是一种先进后出的数据结构,数组和链表都可以生成栈。(LIFO)
(就像放在箱子的衣服,先放进去的后拿出来)
压入栈的操作称为push,弹出的操作为pop。
其限制是仅允许在表的一端进行插入和删除运算,这一段被称为栈顶,另一端为栈底。
在这里插入图片描述

四、队列

队列是一种先进先出的数据结构,数组和链表也都可以生成队列。(FIFO)
(就像一条路,有一个入口和一个出口,先进去的就可以先出去)
在这里插入图片描述
队列只允许在队尾添加数据,在队头删除数据。

五、树

由n(n>=0)个有限节点组成的一个有层次的集合。
在任意一颗非空树中:
每个节点有零个或多个子节点;
没有父节点的节点有且只有一个父节点;
除了根节点外,每个子节点可以分为多个不相交的子树。

二叉树

二叉树是每个节点最多有两个子树的树结构
前序遍历(根,左,右)
中序遍历(左,根,右)
后序遍历(左,右,根)

完全二叉树

一棵深度为k,除去第k层,其它各层的节点数都达到最大个数,第k层所有节点都连续集中在最左边

满二叉树

一棵深度为k,且有2^k-1个节点的数

平衡二叉树(AVL)

它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两棵子树都是一棵平衡二叉树。同时,平衡二叉树必定是二叉搜索树。

二叉查找树(二叉搜索树、BST)

若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值;
若任意节点的右子树不空,则右子树上所有节点的值均大于它的根节点的值;
任意节点的左右子树也分别为二叉查找树。
没有键值相等的节点。

红黑树

红黑树是一棵二叉搜索树,它在每个节点上增加了一个存储位来表示节点的颜色。
(自平衡二叉查找树)

六、散列表(哈希表)

根据key和value直接进行访问的数据结构。

七、堆

堆可以被看做一棵树的数组对象:
堆中某个节点的值总是不大于或不小于其父节点的值;
堆总是一棵完全二叉树。
大根堆:每个节点的值都大于或等于左右孩子节点
小根堆:每个节点的值都小于或等于左右孩子节点
在这里插入图片描述

八、图

图是由节点的又穷集合和边的集合组成。其中,为了与树形结构加以区分,在图结构中称为顶点,边是顶点的有序偶对。若两个顶点存在一条边,就表示这两个顶点具有相邻关系。
按照顶点指向的方向可分为无向图和有向图:
在这里插入图片描述在这里插入图片描述

知识点

数据结构三要素

1、逻辑结构:线性和非线性
2、存储结构:顺序,链式,索引,散列
3、数据运算:算法

栈与队列的相同点

1、都是线性结构
2、插入操作都是限定在表尾进行
3、都可以通过顺序结构和链式结构实现
4、插入与删除的时间复杂度都是O(1),空间复杂度也相同
5、多链栈与多链队列的管理模式可以相同

栈与队列的不同点

1、栈先进后出,队列先进先出
2、删除数据元素的位置不同,栈的操作在表尾(栈顶),队列的删除在表头
3、顺序栈能够实现多栈空间共享,而顺序队列不能
4、应用场景不同:
栈—括号问题的求解,表达式的转换和求值,函数调用和递归实现,深度优先搜索遍历
队列—计算机中各种资源的管理,消息缓冲器的管理和广度优先搜索遍历
参考1 https://www.cnblogs.com/jimoer/p/8783604.html
参考2 https://www.cnblogs.com/songwenjie/p/8878851.html
参考3 https://blog.csdn.net/yeyazhishang/article/details/82353846#7%E5%A0%86

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值