一、基本的数据结构
1、数组
2、链表
3、栈
4、队列
5、树
6、图
一.数组:
1.由n个同种类型的元素以顺序存储的方式存储在计算机内存中,数据元素的类型是一致的
2.每个元素有个下标,下标从0开始标号,数组有数组名字
3. 访问每一个具体元素的方法:数组名[下标]
列如在C语言中让a[0]到a[n]对应1到n则a[0]=1,a[1]=2.....以此类推
4.数组的优点:能够随机存取
数组的缺点:插入删除不方便,需要移动元素
二.链表:
1.结点:数据域+指针域
2.头指针:仅仅是一个变量,没有数据域,存储头结点的起始地址
3.头结点:是和结点一样的,数据域+指针域,指针域存储第一个元素的起始地址
4.链表的唯一标识是头指针:头指针定了,第一元素就能找到,第一个结点的数据域放数据本身,指针域放第二个元素的起始地址
5.遍历:必须从头开始依次找每一个元素
6.插入:无论往哪个位置插入,都只需要修改结点中的指针域,不需要移动元素
7.删除:无论删除哪个位置的元素,只需要修改结点中的指针域,不需要移动元素
8.链表的优点:插入删除不需要移动元素
链表的缺点:不能随机存储,无论找第几个都得从头开始找
三.栈
线性表1.规定仅在表尾进行插入或删除操作。
2.后进先出(LIFO结构)
以顺序a1,a2,a3,a4......an进栈
an为栈顶元素,所在的栈是栈顶
a1为栈底元素,所在的栈是栈底
出栈的顺序是an,a(n-1),......a3,a2,a1
an元素为后进元素所以an出栈时先出
1、栈是操作受限的线性表,栈,约定只能在一头进行插入删除,允许操作的那一头,叫栈顶,不允许操作的那一头,我们叫栈底
2、栈的逻辑特性:后进先出
3、栈的存储结构:顺序栈 链栈(结点:数据域+指针域(后继元素的起始地址))
4、在栈底的叫栈底元素,在栈顶的叫栈顶元素
四.队列
队列:线性表1.限定在表的一端(队尾)插入,另一端(队头)删除
2.先进先出(FIFO结构)
以顺序a1,a2,a3,a4......an进队
在队列中:a1,a2,a3,a4......an
a1为队头,an为队尾
a1元素为先进元素所以a1出队时先出
1、队列是操作受限的线性表
2、约定:插入在队尾,删除在队头
3、队列的逻辑特性:先进先出
4、在队头的叫队头元素,在队尾的叫队尾元素
五.树
根结点的度:这个结点拥有的孩子个数(分支数)
树的度:这棵树中所有结点的度的最大值叫这颗树的度
叶子结点:(终端结点)度为零的结点叫叶子结点
非终端结点:度不为零的叫非终端结点
深度:树从根结点开始往下数,叶子结点所在的最大层数称为 树的深度。
2、二叉树
树中结点的度的最大值为2,树中,所有结点的度只能取0,1,2三个值
如果度为零:叶子结点
如果度为2:必须一个叫左孩子一个叫右孩子
如果度为1:说明只有一个孩子,必须指明是左孩子还是右孩子
3、满二叉树:孩子的数量都为二
二叉树中除了叶子结点,每个结点的度都为 2,则此二叉树称为满二叉树。
4、存储结构
顺序存储结构:仅适用于满二叉树
链式存储结构:二叉链表:结点(左指针域+数据域+右指针域)左指针域:左孩子的起始地址,右指针域:右孩子的起始地址
六.图:多对多,非线性结构
有向图
无向图
有向网:弧上有权值
无向网:边上有权值
顶点
边
弧:弧头顶点,弧尾顶点
度:无向图的度
有向图的度又分为入度和出度
入度:某个顶点的入度是以这个顶点为弧头的弧的数量
出度:某个顶点的出度是以这个顶点为弧尾的弧的数量
图中所有顶点的度的和=边(弧)的二倍