数据结构易混点、易错点、题目(个人向)

本文深入探讨数据结构的关键概念,包括逻辑结构、存储结构及其运算。覆盖线性表、栈、队列、串、数组和广义表等内容,并解析常见的易混淆点与易错题。适合备考或深入学习数据结构者。

注:蓝色字体可点击

数据结构(公式及要点汇总)

数据结构易混点、易错点、题目(2)本文内容过多 分成两部分

不知为什么资源传不了 这里贴题目来源:《数据结构习题解析与实验指导》,应该是这本书,(后续更新)

目录

第一章 绪论

数据的结构

算法

第二章 线性表

题:

解:

填空题

解:

第三章 栈和队列

题:

解:

填空题

填空解:

第四章 串

题:

解:

第五章 数组和广义表

题:

解:

第六章 树和二叉树

题:

解:

填空题

填空题解


第一章 绪论

数据的结构

数据:是计算机加工的对象,是数据元素的集合。(表格)

数据元素:是数据基本单位。(表格中的一行)

数据项:是数据的有独立含义的最小标识单位。(表格中的一个)


ADT:数据对象(=数据,带有结构的数据元素的集合)、数据关系、基本操作

数据结构包括:逻辑结构、存储结构、运算


存储结构:在计算机物理存储的方式

逻辑结构:数据之间的逻辑关系。在人脑逻辑中,假定数据关系的结构

1.数据结构的逻辑结构:分为两大类:线性结构、非线性结构。

线性结构(有且仅有一个开始和终端结点、并且所有结点最多一个前趋、后继):线性表、栈、队列、双端队列、数组和串

非线性结构(一个结点有多个直接前驱或直接后继):数组、矩阵、广义表、树和图。 (数组存疑

数据逻辑结构包括①(集合结构)、②(线性结构)和③(树形结构)三种类型,树形结构和图形结构合称为④(非线性结构).
集合结构: 集合中任何两个数据元素之间都没有逻辑关系,组织形式松散.
线性结构: 结点按逻辑关系依次排列形成一个“锁链”.
树形结构: 树形结构具有分支、层次特性,其形态有点像自然界中的树.

2.数据结构的存储结构:顺序、链式、索引、哈希

顺序存储结构:循环队列

该方法把逻辑上相邻的结点存储在物理位置上相邻的存储单元里,结点间的逻辑关系由存储单元的邻接关系来体现。

由此得到的存储表示称为顺序存储结构 (Sequential Storage Structure ),通常借助程序语言的数组描述。

该方法主要应用于线性的数据结构。非线性的数据结构也可通过某种线性化的方法实现顺序存储。

链式存储结构:链表

该方法不要求逻辑上相邻的结点在物理位置上亦相邻,结点间的逻辑关系由附加的指针字段表示。由此得到的存储表示称为链式存储结构(Linked Storage Structure), 通常借助于程序语言的指针类型描述。

索引存储方法:

该方法通常在储存结点信息的同时,还建立附加的索引表。 索引表由若干索引项组成。若每个结点在索引表中都有一个索引项,则该索引表称之为稠密索引(Dense Index )。若一组结点在索引表中只对应一个索引项,则该索引表称为稀疏索引(Spare Index)。索引项的一般形式是:(关键字、地址)

关键字是能唯一标识一个结点的那些数据项。稠密索引中索引项的地址指示结点所在的存储位置;稀疏索引中索引项的地址指示一组结点的起始存储位置。

散列存储方法:哈希表

该方法的基本思想是:根据结点的关键字直接计算出该结点的存储地址。


题1:以下与数据的存储结构无关的术语是()。(答案在上面找)

A.循环队列    B.链表    C.哈希表    D.栈

题2:以下哪个数据结构不是多型数据类型(    )

A.栈        B.广义表       C.有向图       D.字符串

题3:数据的物理结构包括()的表示和()的表示。

题4:对于给定的n个元素,可以构造出的逻辑结构有:四种

题5:数据的逻辑结构是指____, 一个数据结构在计算机中的__称为存储结构。

题6:抽象数据类型的定义取决于它的一组____,而与____无关,即不论其内部结构如何变化,只要它的__不变,都不影响其外部使用。


solution2:数据结构中的“多型数据类型”是什么?_百度知道

solution3:数据元素 数据元素间的关系

solution4:集合、线性结构、树形结构、图状结构

solution5:计算机的组织形式  标识(映像)

solution6:逻辑特性  在计算机内部如何表示和实现   数学特性

算法

算法:是对特定问题求解步骤的一种描述,它是指令的有限序列。每条指令表示一个或多个操作。

特性:有穷性、确定性、可行性、输入、输出。(有穷确定可行、输出输入)

要求(目标):正确性、可读性、健壮性、好的时空效率。(正读《健壮效率》)


第二章 线性表

线性表是具有n个数据元素的有限序列n>0

1.若线性表最常用的操作是存取第I个元素及其前驱和后继元素的值,应采用()存储方式

A 单链表      B 双向链表      C 单循环链表      D顺序表

2.在链式存储结构中,数据之间的关系是通过()体现的。

A指示数据元素的指针      B指针

3.(1)静态链表既有顺序存储的优点,又有动态链表的优点。所以,它存取表中第i个元素的时间与i无关(2)静态链表中能容纳的元素个数的最大数在表定义时就确定了,以后不能增加。(3)静态链表与动态链表在元素的插入、删除上类似,不需做元素的移动

错误的是____。

4.长度为n的线性表采用顺序存储,插入一个结点的移动节点的平均次数为

A n      B n/2      C (n-1)/2      D (n+1)/2

5.线性表(a1,a2,…,an)以链接方式存储时,访问第i位置元素的时间复杂性为()

A O(i)      B O(1)      C O(n)      D O(i-1)

6.单向链表长度为n,链接到单向链表长度为m的后,所需时间复杂性为()

7.线性表的实现方法中 元素必须是

A 整数 B字符 C 相同类型 D 结构类型

解:

1.D   2.B   3.(1) 4.B  5.D 6.O(m) 7.C


填空题

1. 对长度为n的线性表采用顺序查找,在等概率的条件下,查找成功的平均检索长度为____。在长度为n的顺序表中删除第i (1≤i≤n)个数据元素需要移动____个数据元素。在长度为n的顺序表中的第i (1≤i≤n)个数据元素之前插入一个新元素,需要移动____个数据元素。

2. 线性表L=(a1, a2,…, an)用数组表示,假定删除表中任一元素的概率相同,则删除一个元素平均需要移动元素的个数是____

3. 在单链表中设置头结点的作用是____

4. 循环单链表的最大优点是:____

5. 顺序存储结构是通过____表示元素之间的关系的;链式存储结构是通过____表示元素之间的关系的。

6. 对于双向链表,在两个结点之间插入一个新结点需修改的指针共____个,单链表为____个

7. 带头结点的双循环链表L为空表的条件是____

8.判断带头结点的单循环链表L仅有一个元素结点的条件是____

9.带头结点的双循环链表L中只有一个元素结点的条件是____

解:

  1. (n+1)/2、n-i、n-i+1 (特殊值法也可 带具体值判断推出的结果是否正确)
  2. (n-1)/2
  3. 有头结点后,插入元素和删除元素的算法统一了,不再需要判断是否在第一个元素之前插入和删除第一个元素。另外,不论链表是否为空,链表指针不变。减少错误,方便编程牛客
  4. 从任一结点出发都可访问到链表中每一个元素
  5. 结点物理上相邻、结点指针
  6. 4、2
  7. L->next == L && L->prior == L
  8. L->next->next == L && L->next != L
  9. L->next->next == L && L->prior->prior == L && L->next != L

第三章 栈和队列

中缀表达式转前、后缀表达式:1.括号法2.栈内栈外优先级3.图解

1.已知循环队列存储在一维数组A[0..n-1]中,且队列非空时front和rear分别指向队头元素和队尾元素。若初始时队列为空,且要求第1个进入队列的元素存储在A[0]处,则初始时front和rear的值分别是()。

    A.0,0    B.0, n-1    C n-1, 0    D.n-1, n-1

2.已知操作符包括‘+’,‘-’,‘*’,‘/’,‘(’、‘)’ 。将中缀表达式a+b-a*((c+d)/e-f)+g转化为等价的后缀表达式ab+acd+e/f-*-g+时,用栈来存放暂时还不能确定运算次序的操作符。若栈初始时为空,则转换过程中同时保存在栈中的操作符的最大个数是()

    A. 5    B. 7    C. 8    D. 11

3.一个栈的入栈序列为1,2,3,…,n,其出栈序列是p1,p2, p3,…,pn。若p2=3,则p3可能取值的个数是()。
    A.n-3    B.n-2    C.n-1    D.无法确定

4.假设栈初始为空,将中缀表达式a/b+(c*d-e*f)/g转化为等价的后缀表达式的过程中,当扫描到f时,栈中的元素依次是()

    A. +(*-    B. +(-*    C. /+(*-*    D. /+-*

5.一个栈的输入序列为1,2,3,…, n,若输出序列的第一个元素是n,输出第i (1≤i≤n)个元素是()。

    A.不确定    B.n-i    C.i    D.n-i+1

6.利用栈求表达式的值时,设立操作数栈OPND,设OPND只有两个存储单元,在下列表达式中,不发生上溢的是()。
    A.A-B*(C-D)    B.(A-B)*C-D    C.(A-B*C)-D    D.(A-B)*(C-D)

7.(多选)若已知一个栈的入栈序列是1,2,3,4,其出栈序列为p1, p2, p3, p4,则p2, p4可能为()。
    A.2、4    B.2、1    C.4、3    D.3、4

8.4个圆盘的Hanoi塔,总的移动次数为()

    A.7    B.8    C.15    D.16

9.在带头结点的链队列中,队头指针指向链表的()

    A.最后一个元素结点    B.第一个元素结点    C.头结点    D.都不是

10.下列更合适表示队列的链表结构是()。

    A.单向链表    B.单向循环链表    C.双向链表    D.双向循环链表

11.队列的“先进先出”特性是指()。

    A.最后插入队列中的元素总是最后被删除    B.当同时进行插入、删除操作时,总是插入操作优先

    C.每当有删除操作时,总要先做一次插入操作    D.每次从队中删除的总是最早插入的元素

12.执行()操作时,需要使用队列作辅助存储空间。

    A.查找哈希(Hash)表    B.广度优先搜索网    C.先序(根)遍历二叉树    D.深度优先搜索网

13.向一个栈顶指针为h的带头结点的链栈中插入指针s所指的结点时,应执行
    A. h->next=s;    B.S->next=h;    C.s->next=h;    h->next=s;    D.s->next=h->next; h->next=s;

14.已知输入序列为abcd,经过输出受限的双向队列后能得到的输出序列有
    A.dacb    B.cadb    C.dbca    D.bdac    E.以上答案都不对

    设一个双端队列,元素进入该队列的次序为a,b,c,d。求既不能由输入受限的双端队列得到,又不能由输出受限的双端队列得到的输出序列。

15.字符序列t3_作为下图(如图3-1)输入时,输出长度为3的,且可作C语言标识符的序列的有()。

解:

  1. 队列的入队在队尾,答案中B和D入队((n-1)+1)%n的结果为0,因为要求第1个进入队列的元素存储在A[0]处,且 front和rear分别指向队头元素和队尾元素,故选B。循环队列有取%操作。博文第四题
  2. 博文第三题,这题想错了 一开始我还以为一直入 知道遇到)才弹出选了B。。。好久没学忘太快啦。
  3. 1,2先于3已入栈,且其中有一个已出栈,另一个在3入栈并出栈后可立即出栈。从4到n,任何一个都可以入栈后立即出栈。因此,p3可能的取值有n-1个,故选C。就是除了1不能出栈其他都有可能。
  4. 博文第四题
  5. 注意此处输出是从后输出 一开始想成第i个就是输出第i个 实际应该n-i+1  (看不懂可以用1234 输出第2个试试看 4-2+1=3 )其他解释
  6. A -*( 错误 C (-* 错误 D (- 遇到 ) 全部弹出 *(- 错误 B自己试试看结合上面的博文
  7. 答案ABD 仅解释BC选项 B 3241  C 4第二个弹出 3只能第一个第三个弹出
  8. 总的移动次数2^{n}-1    链接
  9. C
  10. B 插入把待插结点->头结点,尾指针->待插结点,更新尾指针的位置. 删除直接->next->next即可   图片来源
  11. 答案A是正确的。若队列不空,每次删除的是队头元素,D的错误在于“最早”。其他解释
  12. 广度优先搜索网  详解 图的拓扑排序、深度优先、关键路径算法用的辅助;树的层次遍历、图的广度优先遍历用的队列辅助
  13. D 头插法 先指向栈头防止丢失 在更新栈头
  14. 解释1  解释2可能题对不上 但是思路还是一致的
  15. 注意C语言标识符即可

填空题

1. 在栈的ADT定义中,除初始化操作外,其他基本操作的初始条件都要求____

2. 多个栈共存时,最好用____作为存储结构。

3. 已知链队列的头尾指针分别是f和r,则将值x入队的操作序列是____ 

4. 区分循环队列的满与空,只有两种方法,它们是____ 和____ 

5. 已知一循环队列的存储空间为[m..n],其中n>m,队头和队尾指针分别为front 和 rear,则此循环队列判满的条件是____ 

6. 浙大程序填空题

7. 下面的程序将一个整数e压入堆栈S,实现堆栈的入栈操作,请在空格处填上适当的语句实现该操作。其中堆栈S的定义如下:

typedef struct{
  int  *base;
  int  *top;
  int stacksize;
 }SqStack;

 int Push(SqStack S,int e)
 {
     if ( ____ ){ 
            S.base=(int *) realoc(S.base,(S.stacksize+1)*sizeof(int));
            if( ____ ){
                printf("Not Enough Memory!\n");
                return(0);
             }              
             S.top=____; 
             S.stacksize=____;  
         }
     ____;    
     return 1;

 }

填空解:

  1. 栈存在。
  2. 链式存储结构
  3. new(s); s->data=x; s->next=r->next; r->next=s; r=s;
  4. 牺牲一个存储单元、设标记。(还有设立计数器等方法)
  5. (rear+1)%(n-m+1)==front(比较不常规)
  6. 随便看看就好
  7. (1) S.top - S.base >= S.stacksize-1 (2) !S.base(3 ) S.base+S.stacksize-1
    (4) S.stacksize+1
    (5)*(++S.top)=e    (此题就是双端栈)

第四章 串

串是一种特殊的线性表,特殊性体现在数据元素是一个字符
两个字符串相等的充分必要条件是:串的长度相等并且两串对应字符相等。或者说两个串的串值相等
正文串长度为n,模式串长度为m,则串匹配的KMP算法的时间复杂度为O(m+n)

串的基本操作

StrAssign(T,chars):赋值操作。把串T赋值为chars
StrCopy(&T,S): 复制操作。由串S复制得到串T
StrEmpty(S): 判空操作。若S为空串,则返回TRUE,否则返回FALSE
Strcompare (S,T): 比较操作。若S>T,则返回值>0;若s=T,则返回值=0;若s<T,则返回值<0
StrLength(S):

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值