数据结构教程(第3版—李春葆)第2章课后答案

合集下载

李春葆《数据结构教程》(C++语言描述)配套题库【课后习题】(线性表)

李春葆《数据结构教程》(C++语言描述)配套题库【课后习题】(线性表)
(10)以下关于链表的叙述中,不正确的是______。 A.结点除自身信息外还包括指针域,因此存储密度小于顺序存储结构 B.逻辑上相邻的元素物理上不必相邻 C.可以通过计算直接确定第 i 个结点的存储地址 D.插入、删除运算操作方便,不必移动结点 【答案】C 【解析】链表每个元素的存储地址是随机分配的,通过指针相连接,因此不能通过结算 直接缺点第 i 个结点的位置。
项;插入和删除操作不需要移动元素,则必须采取链表存储结构。
(12)不带头结点的单链表 head 为空的判定条件是______。 A.head=NULL B.head->next=NULL C.head->nex=head D.head!=NULL 【答案】A 【解析】由于单链表不带有头结点,其头指针所指向的元素即为第一个元素,因此只要 判断头指针指向元素为 NULL 即可知链表为空。
3 / 29
圣才电子书 十万种考研考证电子书、题库视频学习平台

杂,也不能实现随机读取元素,同时存储密度较低因而浪费存储空间。
(7)当线性表采用链表存储时,其存放元素的单元地址______。 A.必须是连续的 B.一定是不连续的 C.部分地址必须是连续的 D.连续与否均可以 【答案】D 【解析】线性表的采用链表存储,用指针记录对应元素的位置,对元素的存储位置没有 任何要求。
(13)某线性表最常用的操作是在最后一个结点之后插入一个结点或删除第一个结点, 故采用______存储方式最节省运算时间。
2 / 29
圣才电子书

为 Ο(n),D 项错误。
十万种考研考证电子书、题库视频学习平台
(5)将两个各有 n 个元素的递增有序顺序表归并成一个有序顺序表,其最少的比较次 数是______。

李春葆《数据结构教程》(C++语言描述)配套题库【课后习题】(串)

李春葆《数据结构教程》(C++语言描述)配套题库【课后习题】(串)

{
i=ch-'A'+10;
num[i]++;
}
}
(2)设计一个算法,将一个链串 S 中的所有子串”abc”删除。 答: String deleteabc(String S) {
String t=’abc’; String nstr; int i=0,j=0,k=0;
6 / 11
圣才电子书 十万种考研考证电子书、题库视频学习平台
(2)以下______是“abcd32lABCD”串的子串。 A.abcd B.B21AB C.”abcABC” D.“21AB” 【答案】D 【解析】串需要用引号引起来,没有引号的只是字符的罗列而不是串,因此 AB 项错误; 由在一个串中由任意连续的字符组成的子序列称为该串的子串可知,C 项中字符串并不包含
②对于模式串 t(t=t0t1…tm-1),求 next 数组时,next[i]在什么条件下取-1。 答:当 i=0 时,即 next[0]=-1。
(4)设目标串为 s=“abcaabbcaaabababaabca”,模式串为 p=“babab”。 ①计算模式 P 的 答:-1,0,1,2,0。 ②不写算法,只画出利用 KMP 算法进行模式匹配时的每一趟的匹配过程。
二、问答题 (1)若 s1 和 s2 为串,给出使 s1//s2=s2//s1 成立的所有可能的条件(其中,“//” 表示两个串连接的运算符)。 答:①s1 和 s2 之中至少有一个为空串 ②s1 和 s2 的值相等 ③s1 和 s2 之中某一个串可由另一个串经过重复得到。
3 / 11
圣才电子书 十万种考研考证电子书、题库视频学习平台
1 / 11
圣才电子书 十万种考研考证电子书、题库视频学习平台

数据结构李春葆 第2章 线性表

数据结构李春葆 第2章  线性表

2.2.1 线性表的顺序存储—顺序表
线性表的顺序存储结构:把线性表中的所有元素按照 其逻辑顺序依次存储到从计算机存储器中指定存储位臵开 始的一块连续的存储空间中。 这样,线性表中第一个元素的存储位臵就是指定的存储 位臵,第i+1个元素(1≤i≤n-1)的存储位臵紧接在第i个元 素的存储位臵的后面。 线性表 逻辑结构 顺序表 存储结构
回true,否则返回false。
bool ListEmpty(SqList *L) {
return(L->length==0);
}
本算法的时间复杂度为O(1)。
(4)求线性表的长度ListLength(L)
该运算返回顺序表 L 的长度。实际上只需返回 length成员 的值即可。
int ListLength(SqList *L)
( 3 )判线性表是否为空表 ListEmpty(L) :若 L 为空表, 则返回真,否则返回假。 ( 4 )求线性表的长度 ListLength(L) :返回 L 中元素个数。 ( 5)输出线性表 DispList(L): 当线性表 L不为空时,顺序 显示L中各节点的值域。 (6)求线性表L中指定位臵的某个数据元素 GetElem(L,i,&e) :用 e 返回 L 中第 i ( 1≤i≤ListLength(L) )个 元素的值。
void unionList(List LA,List LB,List &LC) { int lena,i; ElemType e; InitList(LC); for (i=1;i<=ListLength(LA);i++) //将LA的所有元素插入到Lc中 { GetElem(LA,i,e); ListInsert(LC,i,e); } lena=ListLength(LA); //求线性表LA的长度 for (i=1;i<=ListLength(LB);i++) { GetElem(LB,i,e); //取LB中第i个数据元素赋给e if (!LocateElem(LA,e)) //LA中不存在和e相同者,插入到LC中 ListInsert(LC,++lena,e); } }

部分习题参考答案(数据结构 李春葆)PPT课件

部分习题参考答案(数据结构 李春葆)PPT课件

//对应的队列为空队时
{
QH[x]=s;
QT[x]=s;
}
else
{
QT[x]->next=s; //将*s节点链到QT[x]所指节点之后
QT[x]=s;
//让QT[x]仍指向尾节点
}
}
16
void Create(QNode *QH[],QNode *QT[]) //根据用户输入创建队列
{
int n,x,i;
L->data[j+1]=L->data[j]; L->data[i]=x; L->length++; }
1
2.3 设计一个算法,将一个带头结点的数据域依次为a1,a2,…, an(n≥3)的单链表的所有结点逆置,即第一个结点的数据域变 为an,…,最后一个结点的数据域为a1。
void Reverse(LinkList *&L) { LinkList *p=L->next,*q;
}
printf("\n");
}
18
void main()
{
int i;
QNode *QH[MAXQNode],*QT[MAXQNode];
//各队列的队头QH和队尾指针QT
for (i=0;i<MAXQNode;i++)
QH[i]=QT[i]=NULL;
解:(1)A、D均合法,而B、C不合法。因为在B中,先 进栈一次,立即出栈三次,这会造成栈下溢。在C中共进 栈五次,出栈三次,栈的终态不为空。
10
(2)本题使用一个链栈来判断操作序列是否合法,其中A为存
放操作序列的字符数组,n为该数组的元素个数(这里的

数据结构(李春葆)习题与解析

数据结构(李春葆)习题与解析

李春葆编著:数据结构(C 语言篇)――习题与解析(修订版)语言篇)――习题与解析(修订版)清华大学出版社清华大学出版社一、绪论一、绪论选择题选择题1.数据结构是一门研究非数值计算的程序设计问题数据结构是一门研究非数值计算的程序设计问题 计算机的计算机的 以及它们之间的以及它们之间的 和运算等的学科。

算等的学科。

1 A.数据元素数据元素 B.计算方法计算方法 C.逻辑存储逻辑存储 D.数据映像数据映像2 A.结构结构 B.关系关系 C.运算运算 D.算法算法2.数据结构被形式地定义为数据结构被形式地定义为 (K, R),其中,其中K 是 的有限集,R 是K 上的上的 有限集。

有限集。

1 A.算法算法 B.数据元素数据元素 C.数据操作数据操作 D.逻辑结构逻辑结构2 A.操作操作 B.映像映像 C.存储存储 D.关系关系3.在数据结构中,从逻辑上可以把数据结构分成在数据结构中,从逻辑上可以把数据结构分成 。

A.动态结构和静态结构动态结构和静态结构B.紧凑结构和非紧凑结构紧凑结构和非紧凑结构C.线性结构和非线性结构线性结构和非线性结构D.内部结构和外部结构内部结构和外部结构4.线性结构的顺序存储结构是一种线性结构的顺序存储结构是一种 的存储结构,线性表的链式存储结构是一种线性表的链式存储结构是一种 的存储结构。

储结构。

A.随机存取随机存取B.顺序存取顺序存取C.索引存取索引存取D.散列存取散列存取5.算法分析的目的是算法分析的目的是 ,算法分析的两个主要方面是,算法分析的两个主要方面是 。

1 A.找出数据结构的合理性找出数据结构的合理性 B.研究算法中的输入和输出的关系研究算法中的输入和输出的关系C.分析算法的效率以求改进分析算法的效率以求改进D.分析算法的易懂性和文档性分析算法的易懂性和文档性2 A.空间复杂度和时间复杂度空间复杂度和时间复杂度 B.正确性和简单性正确性和简单性C.可读性和文档性可读性和文档性D.数据复杂性和程序复杂性数据复杂性和程序复杂性6.计算机算法指的是计算机算法指的是 ,它必须具备输入、输出和,它必须具备输入、输出和 等 5个特性。

数据结构简明教程(李春葆版)课后习题答案

数据结构简明教程(李春葆版)课后习题答案

数据结构简明教程(第2版)配套练习题参考答案———————数据结构简明教程———————1.练习题1参考答案1.单项选择题(1)D (2)C (3)C (4)A (5)C (6)B (7)C (8)A (9)C (10)B 2.填空题(1)①逻辑结构 ②存储结构 ③运算(不限制顺序)(2)①线性结构 ②非线性结构(不限制顺序)(3)①数据元素 ②关系(4)①没有 ②没有(5)①前驱 ②一 ③后继 ④任意多个(6)任意多个(7)①顺序 ②链式 ③索引 ④哈希(不限制顺序)(8)①时间 ②空间(不限制顺序)(9)问题规模(通常用n 表示)。

(10)辅助或临时空间3.简答题(1)答:运算描述是指逻辑结构施加的操作,而运算实现是指一个完成该运算功能的算法。

它们的相同点是,运算描述和运算实现都能完成对数据的“处理”或某种特定的操作。

不同点是,运算描述只是描述处理功能,不包括处理步骤和方法,而运算实现的核心则是处理步骤。

(2)答:T 1(n )=O(n log 2n ),T 2(n )=O( ),T 3(n )=O(n 2),T 4(n )=O(n log 2n )。

(3)答:j =0,第1次循环:j =1,s =10。

第2次循环:j =2,s =30。

第3次循环:j =3,s =60。

第4次循环:j =4,s =100。

while 条件不再满足。

所以,其中循环语句的执行次数为4。

(4)答:语句s ++的执行次数2)2)(3(3)1()1(12121-+=++-+=+-=∑∑∑-=-==n n n n i n n i n i i nj。

(5)答:其中x ++语句为基本运算语句,∑∑∑=+==-=-==n i n i j ni n n i n n T 1112)1()(1)(=O(n 2)。

(6) 答:由于内循环j 的取值范围,所以i ≤n /2,则,该程序段的时间复杂度为O(n 2)。

∑∑∑-===--==2/122/124/))12((n i nij n i n i n m 3log 2n2.练习题2参考答案1.单项选择题(1)A (2)C (3)A (4)B (5)C(6)D (7)C (8)B (9)A (10)C(11)B (12)A (13)C (14)D (15)D(16)D (17)A (18)C (19)A (20)D2.填空题(1)L.length=0(2)O(1)(3)O(n)(4)n-i(5)①物理存储位置②指针域(6)①前驱 ②O(n)(7)q=p->next; p->next=q->next; free(q);(8)s->next= p->next; p->next=s;(9)O(1)(10)L->next==L3.简答题(1)答:顺序存储结构中,逻辑上相邻元素的存储空间也是相邻的,无需额外空间表示逻辑关系,所以存储密度大,同时具有随机存取特性。

第2章线性表(2)-数据结构教程(Java语言描述)-李春葆-清华大学出版社


public void Setsize(int nlen)
//设置线性表的长度
{ int len=size();
if (nlen<0 || nlen>len)
throw new IllegalArgumentException("设置长度:n不在有效范围内");
s
s.next=head.next;
ai
head.next=s;
head
…
∧
9/85
public void CreateListF(E[] a) { LinkNode<E> s;
for (int i=0;i<a.length;i++) { s=new LinkNode<E>(a[i]);
s.next=head.next; head.next=s; } }
12/85
3. 线性表基本运算在单链表中的实现
查找序号为i(0≤i≤n-1,n为单链表中数据结点个数)的结点
private LinkNode<E> geti(int i) { LinkNode<E> p=head;
int j=-1; while (j<i) { j++;
p=p.next; } return p; }
//尾插法:由数组a整体建立单链表
//t始终指向尾结点,开始时指向头结点 //循环建立数据结点s //新建存放a[i]元素的结点s //将s结点插入t结点之后
//将尾结点的next置为null
a=('a','b','c','d'),调用CreateListR

第2章线性表(1)-数据结构教程(Python语言描述)-李春葆-清华大学出版社

提纲
CONTENTS
1/43
线性表是具有相同特性的数据元素的一个有限序列。 所有数据元素类型相同。 线性表是有限个数据元素构成的。 线性表中数据元素与位置相关,即每个数据元素有唯一的序号。
2/43
线性表的逻辑结构表示 (a0,a1,…,ai,ai+1,…,an-1)
用图形表示的逻辑结构:
a0
a1
…
ai
ai+1
…
an-1
说明
线性表中每个元素ai的唯一位置通过序号或者索引i表示,为了 算法设计方便,将逻辑序号和存储序号统一,均假设从0开始, 这样含n个元素的线性表的元素序号i满足0≤i≤n-1。
3/43
ADT List { 数据对象:
D={ai | 0≤i≤n-1,n≥0 } 数据关系:
r={<ai,ai+1> | ai,ai+1∈D,i=0,…,n-2} 基本运算:
class SqList: def __init__(self): self.initcapacity=5; self.capacity=self.initcapacity self.data=[None]*self.capacity self.size=0 #线性表的基本运算算法
#顺序表类 #构造方法 #初始容量设置为5 #容量设置为初始容量 #设置顺序表的空间 #长度设置为0
#改变顺序表的容量为newcapacity #含若干个元素的数组a的全部元素整体创建顺序表,即依次将a中的元素 添加到data数组的末尾,当出现上溢出时按实际元素个数size的两倍扩大容量。
def CreateList(self, a): for i in range(0,len(a)): if self.size==self.capacity: self.resize(2*self.size); self.data[self.size]=a[i] self.size+=1

数据结构(第3版)习题答案

int count=0; /*用于统计输出序列的个数*/
void initStack(Stack *S) /*初始化空栈*/
{ S->top=-1; }
一个元素出栈后即进入队列Q,若6个元素出队的序列为e2、e4、e3、e6、e5和e1,则栈S
的容量至少应该为(C)。
A.6
B.4
C.3
D.2
(3)设栈的输入序列为1、2、3…n,若输出序列的第一个元素为n,则第i个输出的元素为
(B)。
A.不确定
B.n−i+1
C.i
D.n−i
(4)在一个长度为n的顺序表中删除第i个元素(1<=i<=n)时,需向前移动(A)个
#define MAX 26
typedef struct s{
char a[MAX];
int top;
}Stack;
/*定义一些全局变量*/
Stack S; /*定义全局性的栈*/
char d[MAX],seq[MAX]; /*d[MAX]用于存储原始入栈序列,seq[MAX]用于存储输出序列*/
int len; /*定义将通过栈的元素个数*/
所以它们是两种不同的数据结构。
1.4线性结构的特点是什么?非线性结构的特点是什么?
【答】:线性结构元素之间的关系是一对一的,在线性结构中只有一个开始结点和一个终端结
点,其他的每一个结点有且仅有一个前驱和一个后继结点。而非线性结构则没有这个特点,元
素之间的关系可以是一对多的或多对多的。
1.5数据结构的存储方式有哪几种?
第2章
线性表及其顺序存储
2.1选择题
(1)表长为n的顺序存储的线性表,当在任何位置上插入或删除一个元素的概率相等时,

李春葆《数据结构教程》笔记和课后习题详解-第一章至第二章【圣才出品】

第1章绪论1.1复习笔记一、数据结构1.概述(1)计算机对具体问题的处理在用计算机解决一个具体的问题时,大致需要经过以下几个步骤:①分析问题,确定数据模型。

②设计相应的算法。

③编写程序,运行并调试程序,直至得到正确的结果。

(2)数据的含义①数据是描述客观事物的数、字符以及所有能输入到计算机中并被计算机程序处理的符号的集合。

从计算机的角度看,数据是所有能被输入到计算机中,且能被计算机处理的符号的集合。

它是计算机操作的对象的总称,也是计算机所处理信息的某种特定的符号表示形式。

②数据元素是组成数据的、有一定意义的基本单位,在计算机中通常作为整体处理,有些情况下数据元素也称为元素、结点、记录等。

一个数据元素可以由若干个数据项组成。

数据项是具有独立含义的数据的最小单位,也称为域。

③数据对象是性质相同的有限个数据元素的集合,它是数据的一个子集。

默认情况下,数据结构中的数据指的都是数据对象。

(3)数据结构的定义数据结构是指所有数据元素以及数据元素之间的关系,可以看作是相互之间存在特定关系的数据元素的集合,因此,可时把数据结构看成是带结构的数据元素的集合。

数据结构包括以下几个方面:①数据元素之间的逻辑关系,即数据的逻辑结构,它是数据结构在用户面前呈现的形式。

数据的逻辑结构是从逻辑关系(主要指数据元素的相邻关系)上描述数据的,它与数据的存储无关,是独立于计算机的。

因此,数据的逻辑结构可以看作是从具体问题抽象出来的数学模型。

②数据元素及其关系在计算机存储器中的存储方式,即数据的存储结构,也称为数据的物理结构。

数据的存储结构是逻辑结构用计算机语言的实现或在计算机中的表示(也称为映像),也是指逻辑结构在计算机中的存储方式,它是依赖于计算机语言的。

一般情况下,只在高级语言(如C、C++、Java语言)的层次上讨论存储结构。

③施加在该数据上的操作,即数据的运算。

数据的运算是定义在数据的逻辑结构之上的,每种逻辑结构都有一组相应的运算。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档