数据结构学习-知识点总结(持续更新)

数据结构学习记录(持续更新)

文章目录

    • 第一章 绪论
      • 1.1 数据结构的基本概念
        • 1.1 练习题
      • 1.2 算法和算法评价
        • 1.2 练习题
    • 第二章 线性表
      • 2.1 线性表的定义和基本操作
        • 2.1 练习题
      • 2.2 线性表的顺序表示
        • 2.2 练习题

第一章 绪论

1.1 数据结构的基本概念

  1. 数据结构的三要素:逻辑结构、存储结构(物理结构)、数据的运算
  2. 逻辑结构分为线性结构非线性结构
线性结构
一般线性表
受限线性表
线性表推广
栈和队列
数组
广义表
非线性结构
集合
树形结构
图状结构
一般树
二叉树
有向图
无向图
数据的逻辑结构
  1. 顺序存储:优点是可以实现随机存取,每个元素占用最少的存储空间;缺点是只能使用相邻的一整块存储单元,因此可能产生较多的外部碎片。
  2. 链式存储:优点是不会出现碎片现象,能充分利用所有存储单元;缺点是每个元素因存储指针而占用额外的存储空间,且只能实现顺序存取
  3. 索引存储。在存储元素信息的同时,还建立附加的索引表。索引表中的每项称为索引项,索引项的一般形式是(关键字,地址)。其优点是检索速度快,缺点是附加的索引表额外占用存储空间。另外,增加和删除数据时也要修改索引表,因而会花费较多的时间。
  4. 散列存储。根据元素的关键字直接计算出该元素的存储地址,又称哈希(Hash)存储。优点是检索、增加和删除节点的操作都很快;缺点是若散列函数不好,则可能出现元素存储单元的冲突,而解决冲突会增加时间和空间开销。
  5. 可以用抽象数据类型(ADT)定义一个完整的数据结构。
  6. 在存储数据时,不仅要存储数据元素的值,而且要存储数据元素之间的关系。

1.1 练习题

  1. 以下属于逻辑结构的是()
    A、顺序表
    B、哈希表
    C、有序表
    D、单链表
    C
    解析:有序表是指关键字有序的线性表,仅描述元素之间的逻辑关系,它既可以链式存储也可以顺序存储,故属于逻辑结构。顺序表、哈希表、单链表是三种不同的数据结构,既描述逻辑结构,又描述存储结构和数据运算。
  2. 以下与数据的存储结构无关的术语是()
    A、循环队列
    B、链表
    C、哈希表
    D、栈
    D
    解析:循环队列(易错点)是用顺序表表示的队列,是一种数据结构。栈是一种抽象数据类型,可采用顺序存储或链式存储,只表示逻辑结构。
  3. 以下关于数据结构的说法中,正确的是()
    A、数据的逻辑结构独立于其存储结构
    B、数据的存储结构独立于其逻辑结构
    C、数据的逻辑结构唯一决定了其存储结构
    D、数据结构仅由其逻辑结构和存储结构决定
    A
    解析:数据的逻辑结构只采用抽象表达方式,独立于存储结构,数据的存储方式有多种不同的选择;而数据的存储结构是逻辑结构在计算机上的映射,它不能独立于逻辑结构而存在。数据结构包括三个要素,缺一不可。
  4. 链式存储设计时,结点内的存储单元地址()
    A、一定连续
    B、一定不连续
    C、不一定连续
    D、部分连续,部分不连续
    A
    解析:链式存储设计时,各个不同结点的存储空间可以不连续,但结点内的存储单元地址必须连续。

1.2 算法和算法评价

  1. 算法是对特定问题求解步骤的一种描述,是指令的有限序列,它还具有5个重要特性:有穷性、确定性、可行性、输入、输出。
  2. 算法的时间复杂度记为T(n)=O(f(n)),通常采用算法中基本运算的频度f(n)来分析算法的时间复杂度,基本运算的频度不仅与问题规模n有关,而且与输入中各元素的取值有关。
  3. 空间复杂度是问题规模n的函数,记为S(n)=O(g(n)),算法原地工作是指算法所需的辅助空间为常量,即O(1)。

1.2 练习题

  1. 一个算法应该是()
    A、程序
    B、问题求解步骤的描述
    C、要满足五个基本特性
    D、A和C
    B
    解析:本题是中山大学某年的考研真题,容易误选C,五个特性只是算法的必要条件,不能成为算法的定义。

第2题代码:

	x=2;
	while(x<n/2)
	x=2*x;
  1. 【2011统考真题】设n是描述问题规模的非负整数,下面的程序片段的时间复杂度是()。
    A、O(log2n)
    B、O(n)
    C、O(nlog2n)
    D、O(n2)
    A

第3题代码:

	int fact(int n){
     
		if(n<=1) return 1;
		return n*fact(n-1);
	}
  1. 【2012统考真题】求整数n(n≥0)的阶乘的算法如下,其时间复杂度是()
    A、O(log2n)
    B、O(n)
    C、O(nlog2n)
    D、O(n2)
    B
  2. 【2013统考真题】已知两个长度分别为m和n的升序链表,若将它们合并为长度为m+n的一个降序链表,则最坏情况下的时间复杂度是()。
    A、O(n)
    B、O(mn)
    C、O(min(m,n))
    D、O(max(m,n))
    D

第5题代码:

	count=0;
	for(k=1;k<=n;k*=2)
		for(j=1;j<=n;j++)
			count++;
  1. 【2014统考真题】下列程序段的时间复杂度是()。
    A、O(log2n)
    B、O(n)
    C、O(nlog2n)
    D、O(n2)
    C

第6题代码:

	int func(int n){
     
		int i=0, sum=0;
		while(sum<n) sum += ++i;
		return i;
	}
  1. 【2017统考真题】下列函数的时间复杂度是()
    A、O(log2n)
    B、O(n1/2)
    C、O(n)
    D、O(nlog2n)
    B

第7题代码:

	x=0;
	while (n>=(x+1)*(x+1))
	x=x+1;
  1. 【2019统考真题】设n是描述问题规模的非负整数,下列程序段的时间复杂度是()
    A、O(log2n)
    B、O(n1/2)
    C、O(n)
    D、O(n2)
    B
  2. 某算法的时间复杂度为O(n2),表明该算法的()。
    A、问题规模是n2
    B、执行时间等于n2
    C、执行时间与n2成正比
    D、问题规模与n2成正比
    C
    解析:时间复杂度T(n)=O(n2),执行时间与n2成正比。T(n)是问题规模n的函数,其问题规模仍然是n。

第9题代码:

	int m=0, i, j;
	for(i=1;i<=n;i++)
		for(j=1;j<=2*i;j++)
			m++;
  1. "m++"的执行次数为()。
    A、n(n+1)
    B、n
    C、n+1
    D、n2
    A
    解析:m++语句的执行次数为 ∑ i = 1 n ∑ j = 1 2 i 1 = ∑ i = 1 n 2 i = 2 ∑ i = 1 n i = n ( n + 1 ) \sum_{i=1}^{n}\sum_{j=1}^{2i}1=\sum_{i=1}^{n}2i=2\sum_{i=1}^{n}i=n(n+1) i=1nj=12i1=i=1n2i=2i=1ni=n(n+1)

第二章 线性表

2.1 线性表的定义和基本操作

2.1 练习题

2.2 线性表的顺序表示

2.2 练习题

  1. 【2010统考真题】设将n(n>1)个整数存放到一维数组R中。设计一个在时间和空间两方面都尽可能高效的算法。将R中保存的序列循环左移p(00,X1,…,Xn-1)变换为(Xp,Xp+1,…,Xn-1,X0,X1,…,Xp-1,)。要求:
    (1)给出算法的基本设计思想。
    (2)根据设计思想,采用C或C++或Java语言描述算法,关键之处给出注释。
    (3)说明你所设计算法的时间复杂度和空间复杂度。
  2. 【2011统考真题】一个长度为L(L≥1)的升序序列S,处在第 ⌈ \lceil L 2 \frac{L}{2} 2L ⌉ \rceil 个位置的数称为S的中位数。例如列S1=(11,13,15,17,19),则S1中的中位数是15。两个序列的中位数是含它们所有元素的升序序列的中位数。例如,若92=(2,4,6,8,20),则.S1和S2的中位数是11。现有两个等长升序序列A和B,试设计一个在时间和空间两方面都尽可能高效的算法,找出两个序列A和B的中位数。要求:
    (1)给出算法的基本设计思想。
    (2)根据设计思想,采用C或C++或Java语言描述算法,关键之处给出注释。
    (3)说明你所设计算法的时间复杂度和空间复杂度。
  3. 【2013统考真题】已知一个整数序列A=(a0,a1,…,an-1),其中0 ≤ ai < n(0 ≤ i < n)。若存在ap1=ap2=…=apm=x且m>n/2(0 ≤ pk < n,1 ≤ k ≤ m),则称 x 为A的主元素。例如A=(0,5,5,3,5,7,5,5),则5为主元素;又如A=(0,5,5,3,5,1,5,7),则A中没有主元素。假设A中的n个元素保存在一个一维数组中,请设计一个尽可能高效的算法,找出A的主元素。若存在主元素,则输出该元素;否则输出-1。要求:
    (1)给出算法的基本设计思想。
    (2)根据设计思想,采用C或C++或Java语言描述算法,关键之处给出注释。
    (3)说明你所设计算法的时间复杂度和空间复杂度。
  4. 【2018统考真题】给定一个含n(n≥1)个整数的数组,请设计一个在时间上尽可能高效的算法,找出数组中未出现的最小正整数。例如,数组{-5, 3, 2, 3}中未出现的最小正整数是1;数组{1, 2, 3}中未出现的最小正整数是4。要求:
    (1)给出算法的基本设计思想。
    (2)根据设计思想,采用C或C++或Java语言描述算法,关键之处给出注释。
    (3)说明你所设计算法的时间复杂度和空间复杂度。

最后一次更新时间:2020/12/27 16:34

你可能感兴趣的:(其他,数据结构,算法,学习,知识点总结,考研)