云南专升本-数据结构知识总结和常考例题(一)

数据结构

数据结构是一门研究非数值计算程序中操作对象,以及这些对象之间关系 和操作的学科。


文章目录

  • 数据结构
  • 一、数据结构的基本概念
      • 抽象数据类型
      • 算法
  • 二、线性表
      • 顺序表
      • 链表
  • 三、栈和队列
      • 栈(stack)
      • 队列(Queue)


一、数据结构的基本概念

  1. 数据是对客观事物的符号表示。

  2. 数据元素是数据的 基本 单位。

  3. 数据项是元素的 最小 单位。

  4. 数据对象是性质相同的数据元素的集合,是数据的子集。

    数据项<数据元素<数据对象<数据
    示例:
    云南专升本-数据结构知识总结和常考例题(一)_第1张图片

云南专升本-数据结构知识总结和常考例题(一)_第2张图片
云南专升本-数据结构知识总结和常考例题(一)_第3张图片

抽象数据类型

抽象数类型可以使用一个三元组来表示,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)个数据元素的有序序列。(会考判断题)
线性表的两种基本的存储结构:顺序存储结构和链式存储结构

基本函数(示例):

云南专升本-数据结构知识总结和常考例题(一)_第4张图片

顺序表

1.顺序表必须利用数组表示
云南专升本-数据结构知识总结和常考例题(一)_第5张图片
下面这个公式不管用什么方法都背下来
用于计算在顺序表中插入元素时、计算地址时:

在n前插元素要移动几个数据元素:(n+1)/2
在n后插元素要移动几个数据元素:(n-1)/2
当前位置插入:   n/2
关于地址计算公式:loc(i)=loc(1)+(i-1)*c
//i是第几个元素,loc(1)初始地址,c是存储内存

链表

云南专升本-数据结构知识总结和常考例题(一)_第6张图片
云南专升本-数据结构知识总结和常考例题(一)_第7张图片
链表中添加头结点的作用:便于边缘化管理

顺序表和链表的区别和联系及适用范围
顺序表:

  1. 内存中地址连续
  2. 长度一般不可变更
  3. 支持随机查找,按位置访问元素时间复杂度为O(1),按值查找为O(n)
  4. 适用于需要大量访问元素的,而少量增删元素的程序.

链表:

  1. 内存中地址连续或非连续都可以
  2. 长度可实时变化
  3. 不支持随机查找,查找元素的时间复杂度为O(n)
  4. 适用于需要大量增删元素,而对访问元素几乎无要求的程序.

常考判断题
下面都是正确选项

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.栈和队列的共同点是只允许在端点处删除和删除元素。

提示:还在连载中…

你可能感兴趣的:(笔记,总结,数据结构,c语言)