数据结构

研究数据信息如何表示、组织、存储、加工和数据之间的逻辑关系。
分为线性结构和非线性结构。

1.线性结构

线性结构:元素与元素之前是一对一的关系。分为线性表、栈和队列。

(1)线性表
a0→a1→…→an
存在唯一的第一元素a0
存在唯一的最后元素an
各元素均有唯一的后继
各元素均有唯一的前驱
(2)栈
操作受限的线性表
LIFO:后进先出
限定仅在表尾进行插入或删除操作的线性表,后进先出。
入栈:PUSH 最先插入的元素放在栈底
出栈:POP 最后元素先出
(3)队列
操作受限的线性表,逻辑结构
入列→an→…→a0→出列

2.非线性结构

有两个或两个以上的直接后继
(1)树
数据有明显的层次关系,其中二叉树:至多有两个子树,且有左右次序。
(2)图
图G由两个集合V,E组成
G= (V,E)
V:顶点有穷非空集合
E:顶点偶对的有穷集
在这里插入图片描述
V(G)={A,B,C,D}
E(G)={<A,B>,<B,C>,<C,D>,<D,A>,<A,C>}

3.查找

(1)顺序查找
线性查找,从表的一段开始,向另一端逐个用给定值k与关键码比较。
(2)折半查找
线性表按从小到大排序,关键字为key,查找范围下限认为low=0,上限为high=n-1,中点为m=(low+high)/ 2→am,用key与am比较,若key>am,替换下限low=mid+1,若key<am,替换上限high=mid-1,直到low>high。
例如:[1,2,3,4,5,6]查找1
m=3,key=1<4,high=2
m=1,key=1<2,high=0
(3)分块查找
将数据(a0,a1,…,an-1)均分为B块,则前B-1块中节点个数为s=n/b,第B块节点数为n-(B-1)*s,每一块中的数据无需排序,前一块中的最大数据小于后一块中最小数据,构造索引表index[1…B],每个元素index[i]存放第i块的最大关键字key,该块的起始位置start,结束位置end。

4.排序

逐步扩大有序子序列。
(1)插入类:
将无序子序列中的一个记录插入到有序子序列中,基于顺序查找:直接插入。
基于折半查找:折半插入排序。基于逐趟缩小增量:希尔排序。
(2)交换类:
交换无序子序列的元素得到其中关键字最小或最大的元素,加入有序子序列中,分为:快速排序和冒泡排序。
(3)选择类:
选择关键字最大或最小的元素,加入子序列中。
(4)归并类:
归并排序是一种分治法,它反复将两个已经排序的序列合并成一个序列。

展开阅读全文

没有更多推荐了,返回首页