数据结构
数据结构是一门研究非数值计算程序中操作对象,以及这些对象之间关系 和操作的学科。
一、数据结构的基本概念
-
数据是对客观事物的符号表示。 -
数据元素是数据的 基本 单位。 -
数据项是元素的 最小 单位。 -
数据对象是性质相同的数据元素的集合,是数据的子集。 数据项<数据元素<数据对象<数据 示例:
抽象数据类型
抽象数类型可以使用一个三元组来表示,ADT=(D,S,P)
//其中D是数据对象,S是D的关系集,P是加载D上的一组操作
抽象数据类型的格式:
ADT抽象数据类型名{
数据对象:<数据对象的定义>
数据关系:<数据关系的定义>
基本操作:<基本操作的定义>
}ADT抽象数据类型名
算法
1、算法的五大特性:有穷性、确定性、可行性、输出和输入。 2、算法设计的要求:正确性、可读性、健壮性、效率与低存储量需求。 3、时间复杂度:T(n)=O(f(n)) 表示随问题规模n的增大,算法执行时间的增长率和f(x)的增长率相同。 4、空间复杂度:S(n)=O(f(x)) n:问题的规模。 时间复杂度的大小关系
O(1) < O(log2n) < O(n) < O(nlog2n) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)
性能:小——大
常考判断题 下面是正确答案,这里我只列举了容易混淆的题,背就完了,
1.数据类型是一个值的集合以及定义在这个值集上的一组操作,可分为原子类型和结构类型.
2.存储密度是指结点数据本身所占存储量和整个结构所占存储量之比.
3.数据项是数据不可分割的最小单位,用它可以识别一个或一组数据,一个数据元素可由若干数据项组成.
4.数据元素是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。
5.能够输入计算机并能被计算机处理的符号统称为数据。
6.数据结构是由存储结构、逻辑结构和运算关系三部分组成。
7.数据的物理结构也称为存储结构.
8.数据的物理结构是数据的逻辑结构在计算机中的映像.
9.非线性结构的特点是表示结点间关系的前驱后继不具有唯一性,结点间是一对多或多对多的关系.
10.顺序存储结构存取操作速度较快。
常考多选题
1.顺序存储结构的特点正确的是?()
A.结点中只存放数据元素本身的信息,无附加内容.
B.可直接存取数据元素.
C.顺序存储是一种静态结构
D.顺序存储空间利用率高
答案:ABC
2.链式存储结构的特点正确的是?()
A.删除元素时不必移动其他元素,速度较快
B.链式存储是一种动态存储结构
C.结点中只存放数据元素本身的信息,无附加内容
D.不能直接存取数据元素,需顺链查找,存取速度较慢
答案:ABD
二、线性表
线性表的定义:是具有相同数据类型的n(n>=0)个数据元素的有序序列。(会考判断题) 线性表的两种基本的存储结构:顺序存储结构和链式存储结构
基本函数(示例):
顺序表
1.顺序表必须利用数组表示 下面这个公式不管用什么方法都背下来 用于计算在顺序表中插入元素时、计算地址时:
在n前插元素要移动几个数据元素:(n+1)/2
在n后插元素要移动几个数据元素:(n-1)/2
当前位置插入: n/2
关于地址计算公式:loc(i)=loc(1)+(i-1)*c
//i是第几个元素,loc(1)初始地址,c是存储内存
链表
链表中添加头结点的作用:便于边缘化管理
顺序表和链表的区别和联系及适用范围 顺序表:
- 内存中地址连续
- 长度一般不可变更
- 支持随机查找,可在O(1)内查找元素
- 适用于需要大量访问元素的,而少量增删元素的程序.
链表:
- 内存中地址连续或非连续都可以
- 长度可实时变化
- 不支持随机查找,查找元素的时间复杂度为O(n)
- 适用于需要大量增删元素,而对访问元素几乎无要求的程序.
常考判断题 下面都是正确选项
1.结点是由数据元素和指示其后继结点地址的信息组成的存储映像
2.静态单链表是利用一块连续的空间,按链表的存储方式组织数据,按顺序存储结构分配空间,所构成的一种链表.
3.从实现角度看,链表可分为静态链表和动态链表.
4.一元多项式的表示和相加可以使用链表实现.
5.一个线性表是n个数据元素的有限序列,除首尾元素外,每个元素有唯一的前驱和唯一的后继.
6.链表查找不方便,需顺链查找
7.顺序表无需为表示结点间的逻辑关系而增加额外的存储空间,存储密度大.
8.链表不支持随机查找,查找元素的时间复杂度为O(n)
9.链表内存中地址连续或非连续都可以
10.顺序表支持随机查找,可在O(1)内查找元素
三、栈和队列
栈(stack)
1.栈:是一种只允许在一端进行插入和删除的线性表 (后进先出) 栈的顺序存储结构 .顺序栈要素:
s.top=-1 ; 空栈
s.top=maxsize-1 ; 栈满
非法状态(上溢和下溢)
++(s.top); s.data[s.top]=x; 元素进栈操作
栈的链式存储结构 .链栈:(单链表)采用链式存储,便于结点的插入和删除 .链栈要素: 提示:是带头结点的
栈空状态:存在空 Lhead->next==null;
栈满状态:不存在栈满的情况(理论上)
元素进栈:p->next=Lhead-> next ; Lhead-> next=p;
元素出栈: p=Lhead->next; x=p->data; Lhead->next=p->next; free(p);
.链栈的基本运算: 入栈:顺序栈判满,链栈不需要判满 出栈:顺序栈和链栈都需要判空
队列(Queue)
1.队列:是一种操作受限的线性表,只允许一端进行插入,另一端进行删除(后进先出) 队列的顺序存储结构 .循环队列要素:
队空:Q.front= =Q.rear
队满:(Q.rear+1)%maxsize==Q.front
元素x进队操作(移动尾指针): Q.rear=(Q.rear+ 1)%Maxsize;Q.data[Q.rear]=x
循环队列的要素
元素x出队操作(移动头指针): Q.front=(Q.front+1)%Maxsize;x=Q.data[Q.front]
队中元素个数: (Q.rear-Q.front+ maxsize)%maxsize
队列的链式存储结构 .链队要素:
队空状态:L->front= =null或者L->rear= =null队满状态:
不存在队列满的情况
元素进队操作(假设原始队列有元素,p指向进队元素)
L->rear->next=p; L->rear=p;
元素出队操作(假设x存储出队元素)
p=L->front ; L->front=p->next ; x=p->data ; free(p);
栈和队列的共同点是:只允许在端点处删除和删除元素
常考判断题 下面是正确答案,这里我只列举了容易混淆的题,背就完了,
1.栈满的判断条件是s.top==stack.size。
2.在队列中存取数据的原则是先进先出。
3.在栈中存取数据的原则是后进先出。
4.链栈入栈顺序栈判满,链栈不需要判满,出栈顺序栈和链栈都需要判空。
5.栈和队列具有相同的逻辑结构。
6.栈和队列的共同点是只允许在端点处删除和删除元素。
提示:还在连载中…
|