数据结构Java版第二章习题

合集下载

数据结构练习题第二章答案

数据结构练习题第二章答案

数据结构练习题第二章答案一、选择题1. 在数据结构中,线性结构的特点是什么?A. 元素之间存在一对一的关系B. 元素之间存在一对多的关系C. 元素之间存在多对多的关系D. 元素之间存在一对一或一对多的关系答案:D2. 栈(Stack)是一种特殊的线性表,其特点是:A. 允许在表的一端进行插入和删除操作B. 允许在表的两端进行插入和删除操作C. 只能在表的两端进行插入和删除操作D. 只能在表的中间进行插入和删除操作答案:A3. 队列(Queue)与栈的主要区别在于:A. 队列是先进先出(FIFO),栈是先进后出(LIFO)B. 栈是先进先出(FIFO),队列是先进后出(LIFO)C. 队列和栈都是先进先出(FIFO)D. 队列和栈都是先进后出(LIFO)答案:A二、简答题1. 什么是链表?链表有哪些基本操作?答案:链表是一种由一系列节点组成的线性数据结构,每个节点包含数据部分和指向下一个节点的指针。

链表的基本操作包括插入节点、删除节点、查找节点和遍历链表。

2. 线性表的顺序存储结构和链式存储结构有何区别?答案:顺序存储结构使用连续的存储单元来存储数据元素,如数组。

链式存储结构不要求数据元素在存储空间中连续,每个元素包含指向下一个元素的指针,如链表。

三、编程题1. 编写一个函数,实现在单链表中插入一个新节点到指定位置。

```c#include <stdio.h>#include <stdlib.h>typedef struct Node {int data;struct Node *next;} Node;Node* createNode(int data) {Node *newNode = (Node*)malloc(sizeof(Node));newNode->data = data;newNode->next = NULL;return newNode;}void insertNode(Node head, int position, int data) {Node *newNode = createNode(data);if (position == 0) {newNode->next = *head;*head = newNode;} else {Node *current = *head;for (int i = 0; current != NULL && i < position - 1; i++) {current = current->next;}if (current == NULL) return; // Position is greater than the number of nodesnewNode->next = current->next;current->next = newNode;}}int main() {Node *head = NULL;insertNode(&head, 0, 10);insertNode(&head, 1, 20);// Print the list to verify the insertionNode *current = head;while (current != NULL) {printf("%d ", current->data);current = current->next;}return 0;}```四、分析题1. 分析栈的后进先出(LIFO)特性在实际应用中的优势和局限性。

数据结构第二章习题(1)

数据结构第二章习题(1)

B. 单链表
C. 双链表
D. 单循环链表
3.具有线性结构的数据结构是( )。
A. 图
B. 树
C. 广义表
D. 栈
4.在一个长度为 n 的顺序表中,在第 i 个元素之前插入一个新元素时,需向后移动( )
个元素。
A. n-i
B. n-i+1
C. n-i-1
5.非空的循环单链表 head 的尾结点 p 满足( )。
A. n-i
B. n-i+1
C. n-i-1
D. i+1
10.线性表是n个( )的有限序列。
A. 表元素
B. 字符 C. 数据元素 D. 数据项
11.从表中任一结点出发,都能扫描整个表的是( )。
A. 单链表
B. 顺序表
C. 循环链表
D. 静态链表
12.在具有n个结点的单链表上查找值为x的元素时,其时间复杂度为( )。
A. q->next=s->next;s->next=p; B. s->next=p;q->next=s->next;
C. p->next=s->next;s->next=q; D. s->next=q;p->next=s->next; 24.在以下的叙述中,正确的是( )。
A. 线性表的顺序存储结构优于链表存储结构 B. 线性表的顺序存储结构适用于频繁插入/删除数据元素的情况
A. p->next=p->next->next;
B. p=p->next;p->next=p->next->next;
C. p =p->next;

数据结构习题及答案 (2)

数据结构习题及答案 (2)

第二章线性表一、选择题1.一个线性表第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是( )(A)110 (B)108(C)100 (D)120参考答案:B2. 向一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动()个元素。

(A)64(B)63 (C)63.5 (D)7参考答案:C3.线性表采用链式存储结构时,其地址()。

(A) 必须是连续的 (B) 部分地址必须是连续的(C) 一定是不连续的 (D) 连续与否均可以参考答案:D4. 在一个单链表中,若p所指结点不是最后结点,在p之后插入s所指结点,则执行()(A)s->next=p;p->next=s; (B) s->next=p->next;p->next=s;(C)s->next=p->next;p=s; (D)p->next=s;s->next=p;参考答案:B5.在一个单链表中,若删除p所指结点的后续结点,则执行()(A)p->next=p->next->next; (B)p=p->next; p->next=p->next->next;(C)p->next=p->next; (D)p =p->next->next;参考答案:A6.下列有关线性表的叙述中,正确的是()(A)线性表中的元素之间隔是线性关系(B)线性表中至少有一个元素(C)线性表中任何一个元素有且仅有一个直接前趋(D)线性表中任何一个元素有且仅有一个直接后继参考答案:A7.线性表是具有n个()的有限序列(n≠0)(A)表元素(B)字符(C)数据元素(D)数据项参考答案:C二、判断题1.线性表的链接存储,表中元素的逻辑顺序与物理顺序一定相同。

()2.如果没有提供指针类型的语言,就无法构造链式结构。

()3.线性结构的特点是只有一个结点没有前驱,只有一个结点没有后继,其余的结点只有一个前驱和后继。

数据结构Java版第二章习题

数据结构Java版第二章习题

数据结构Java版第二章习题在学习数据结构的过程中,第二章的习题往往是巩固和深化对相关概念理解的重要环节。

这一章可能涵盖了诸如数组、链表、栈、队列等基本数据结构的知识。

先来说说数组,这是一种最简单也最常见的数据结构。

在 Java 中,数组是一组相同类型元素的有序集合。

它的优点很明显,比如可以通过索引快速访问元素,查找操作的时间复杂度为 O(1)。

但缺点也不能忽视,比如数组的长度固定,插入和删除元素可能需要移动大量元素,导致时间复杂度较高。

来看一道关于数组的习题:给定一个整数数组,找出其中出现次数最多的元素。

这就需要我们遍历数组,使用一个辅助的数据结构(比如哈希表)来记录每个元素出现的次数,最后找出出现次数最多的那个元素。

再说说链表,链表是由一系列节点组成的,每个节点包含数据和指向下一个节点的引用。

相比于数组,链表在插入和删除操作上具有优势,时间复杂度为 O(1)。

但查找操作的时间复杂度为 O(n)。

有这样一道链表的习题:实现一个链表的反转。

这就需要我们改变链表节点的指针指向,依次将每个节点的 next 指针指向前一个节点,从而实现链表的反转。

接下来是栈,栈是一种特殊的线性表,遵循后进先出(LIFO)的原则。

在 Java 中,可以使用数组或者链表来实现栈。

比如有这样一道关于栈的习题:判断一个表达式中的括号是否匹配。

我们可以将左括号入栈,遇到右括号时弹出栈顶的左括号进行匹配,如果最后栈为空,则括号匹配成功。

然后是队列,队列遵循先进先出(FIFO)的原则。

在实际应用中,比如排队系统、任务调度等都可以用到队列。

例如,有这样一道队列的习题:实现一个循环队列。

这就需要我们处理好队列的头尾指针,以及队列满和空的判断条件。

在解决这些习题的过程中,我们不仅要熟练掌握各种数据结构的特点和操作方法,还要具备良好的逻辑思维和代码实现能力。

同时,通过不断地练习和思考,我们能够更加深入地理解数据结构的本质,为今后解决更复杂的问题打下坚实的基础。

数据结构第2章习题参考答案

数据结构第2章习题参考答案

数据结构第2章习题参考答案1. 简答题1.1 什么是数据结构?数据结构是指相互之间存在一种或多种特定关系的数据元素的集合,它包括数据的逻辑结构和物理结构。

1.2 数据结构的分类有哪些?数据结构可以分为线性结构和非线性结构。

线性结构包括线性表、栈、队列和串;非线性结构包括树和图。

1.3 数据结构的逻辑结构有哪些?数据结构的逻辑结构包括线性结构、树形结构和图形结构。

1.4 数据结构的物理结构有哪些?数据结构的物理结构包括顺序存储结构和链式存储结构。

1.5 什么是算法?算法是指求解问题的具体步骤和方法。

1.6 算法的特性有哪些?算法应具有有穷性、确定性、可行性和输入输出性。

2. 选择题2.1 在栈的顺序存储结构中,栈的存储位置是:A. 自顶向下递增B. 自底向上递增C. 自底向上递减D. 自顶向下递减答案:D2.2 下列哪个数据结构不适合表示有父子关系的数据?A. 二叉树B. 图C. 链表D. 堆答案:D2.3 对于一棵完全二叉树,叶子节点的个数为n,则树中节点的总数为:A. 2nB. 2n + 1C. nD. n + 1答案:A2.4 假设有一个长度为10的栈,初始时栈为空,若对该栈连续执行5次入栈操作,然后执行4次出栈操作,最后执行1次入栈操作,则栈中剩余的元素个数为:A. 0B. 1C. 4D. 6答案:D3. 编程题3.1 实现一个栈数据结构的基本操作,包括入栈、出栈、获取栈顶元素和判断栈是否为空。

```Pythonclass Stack:def __init__(self):self.items = []def is_empty(self):return len(self.items) == 0def push(self, item):self.items.append(item)def pop(self):if self.is_empty():return Nonereturn self.items.pop()def peek(self):if self.is_empty():return Nonereturn self.items[-1]```3.2 实现一个队列数据结构的基本操作,包括入队、出队、获取队首元素和判断队列是否为空。

数据结构习题及答案 (2)

数据结构习题及答案 (2)

第二章线性表一、选择题1.一个线性表第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是( )(A)110 (B)108(C)100 (D)120参考答案:B2. 向一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动()个元素。

(A)64(B)63 (C)63.5 (D)7参考答案:C3.线性表采用链式存储结构时,其地址()。

(A) 必须是连续的 (B) 部分地址必须是连续的(C) 一定是不连续的 (D) 连续与否均可以参考答案:D4. 在一个单链表中,若p所指结点不是最后结点,在p之后插入s所指结点,则执行()(A)s->next=p;p->next=s; (B) s->next=p->next;p->next=s;(C)s->next=p->next;p=s; (D)p->next=s;s->next=p;参考答案:B5.在一个单链表中,若删除p所指结点的后续结点,则执行()(A)p->next=p->next->next; (B)p=p->next; p->next=p->next->next;(C)p->next=p->next; (D)p =p->next->next;参考答案:A6.下列有关线性表的叙述中,正确的是()(A)线性表中的元素之间隔是线性关系(B)线性表中至少有一个元素(C)线性表中任何一个元素有且仅有一个直接前趋(D)线性表中任何一个元素有且仅有一个直接后继参考答案:A7.线性表是具有n个()的有限序列(n≠0)(A)表元素(B)字符(C)数据元素(D)数据项参考答案:C二、判断题1.线性表的链接存储,表中元素的逻辑顺序与物理顺序一定相同。

()2.如果没有提供指针类型的语言,就无法构造链式结构。

()3.线性结构的特点是只有一个结点没有前驱,只有一个结点没有后继,其余的结点只有一个前驱和后继。

数据结构第二章习题答案

数据结构第二章习题答案

数据结构第二章习题答案数据结构第二章习题答案第一题:给定一个数组arr,其中包含n个元素,要求编写一个函数,将数组中的所有元素按照奇偶性重新排列。

奇数元素排在偶数元素之前。

请给出实现代码。

解答:```pythondef rearrange(arr):n = len(arr)left = 0right = n - 1while left < right:while arr[left] % 2 != 0 and left < right:left += 1while arr[right] % 2 == 0 and left < right:right -= 1if left < right:arr[left], arr[right] = arr[right], arr[left]left += 1right -= 1return arr```第二题:给定一个字符串,判断其是否为回文串。

回文串是指正读和反读都相同的字符串。

要求不考虑大小写和非字母字符,只考虑字母字符。

解答:```pythondef is_palindrome(s):s = ''.join(filter(str.isalpha, s)).lower()return s == s[::-1]```第三题:给定一个链表,判断链表中是否存在环。

如果链表中存在环,则返回True,否则返回False。

解答:```pythonclass ListNode:def __init__(self, val=0, next=None):self.val = valself.next = nextdef has_cycle(head):slow = fast = headwhile fast and fast.next:slow = slow.nextfast = fast.next.nextif slow == fast:return Truereturn False```第四题:给定一个二叉树,判断其是否为平衡二叉树。

数据结构第2章习题参考答案

数据结构第2章习题参考答案

数据结构第2章习题参考答案2.7习题2.7.1知识点:线性表的逻辑结构一、选择题1①线性表l=(a1,a2,…,an),下列说法正确的是(d)。

a.每个元素都有一个直接前驱和一个直接后继。

b.线性表中至少要有一个元素。

c.表诸元素的排序顺序必须就是由小到大或由小至大。

d.除第一个和最后一个元素外,其余每个元素都有一个且仅有一个直接前驱和直接后继。

2①在线性表的下列运算中,不改变数据元素之间结构关系的运算是(d)。

a.插入b.删除c.排序d.定位3①线性表就是具备n个(c)的非常有限序列(n>0)。

【清华大学1998】a.表元素b.字符c.数据元素d.数据项e.信息项二、判断题(t)1①线性表中的每个结点最多只有一个前驱和一个后继。

(f)2①线性表中的每个结点都至少存有一个前驱结点和后继结点。

(f)3①线性表就是n个数的非常有限序列。

(f)4①同一线性表的数据元素可以具有不同的特性。

(t)5①线性表的长度n就是表数据元素的个数,当n=0时,称作空表。

(t)6①线性表就是一个相当有效率的数据结构,它的长度可以根据须要快速增长或延长。

(f)7①对线性表中的数据元素就可以展开出访,无法展开填入和删掉操作方式。

2.7.2知识点:线性表的顺序存储结构一、选择题1①在一个长度为n的顺序表中,在第i个元素(1<=i<=n+1)之前插入一个新元素时需向后移动(b)个元素.a.n-1b.n-i+1c.n-i-1d.i2①若某线性表中最常用的操作方式就是挑第i个元素和打听第i个元素的前趋元素,则使用(d)存储方式最节省时间。

a.单链表b.双链表c.单向循环d.顺序表3②一个数组第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是(b)a.110b.108c.100d.1204①下列哪一条就是顺序存储结构的优点(a)。

【北方交通大学2001】a.存储密度小b.填入运算便利c.删除运算方便d.可方便地用于各种逻辑结构的存储表示5③若长度为n的线性表使用顺序存储结构,在其第i个边线填入一个新元素的算法的时间复杂度为(c)(1<=i<=n+1)。

数据结构第二章作业及答案

数据结构第二章作业及答案

解答(续):
*
解答(续): 五、解: (此处图略) (1) sprior =qprior; (2) qpriornext =s; (3) snext=q; (4) qprior=s; 六、解: (此处图略) (1) p =qprior; (2) ppriornext =q; (3) qprior =pprior; (4) free(p);
解答(续): 删除算法的主要步骤: 若i 不合法或表L空,算法结束,并返回ERROR;否则转2) 将第i个元素赋值给e; 将第i个元素之后的元素(不包括第i个元素)依次向前移动一个位置; 表长-1
解答(续): 删除操作算法(算法2.5 ): Status ListDelete_Sq(SqList &L, int i, ElemType &e) { //在顺序线性表L中删除第.i个元素,并用e返回其值 // i的合法值为 1≤i≤L.length // 表空L.length=0 则i> L.length if((i<1)||(i>L.Length))return ERROR; // i值不合法或表空 p = &(L.elem[i-1]); //p为被删除元素的位置 e = *p; // 被删除元素的值赋给e q = &(L.elem[L.length-1]); // 表尾元素的位置 for (++p; p<=q;++p) *(p-1)=*p; //被删除元素之后的元素前移 --L.length; //表长减1 return OK; } //ListDelete_Sq
*
数据结构第二章作业及答案 一 、选择题 1.下述哪一条是顺序存储结构的优点? A.存储密度大 B.插入运算方便 C.删除运算方便 D.可方便地用于各种逻辑结构的存储表示 2.下面关于线性表的叙述中,错误的是哪一个? A.线性表采用顺序存储,必须占用一片连续的存储单元。 B.线性表采用顺序存储,便于进行插入和删除操作。 C.线性表采用链接存储,不必占用一片连续的存储单元。 D.线性表采用链接存储,便于插入和删除操作。 3.线性表是具有n个( )的有限序列(n>0)。 A.表元素 B.字符 C.数据元素 D.数据项 4.若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用( )存储方式最节省时间。 A.顺序表 B.双向链表 C.带头结点的双向循环链表 D.循环链表

数据结构Java版第二章习题

数据结构Java版第二章习题

(依据自己的状况选作部分习题,不要剽窃)第二章习题次序储存线性表一判断题1.线性表的逻辑次序与储存次序老是一致的。

×2.次序储存的线性表能够按次号随机存取。

√3.次序表的插入和删除操作不需要付出很大的时间代价,由于每次操作均匀只有近一半的元素需要挪动。

×4.线性表中的元素能够是各种各种的,但同一线性表中的数据元素拥有同样的特征,所以是属于同一数据对象。

√5.在线性表的次序储存构造中,逻辑上相邻的两个元素在物理地点上其实不必定紧邻。

×6.在线性表的次序储存构造中,插入和删除时,挪动元素的个数与该元素的地点相关。

√二单项选择题 ( 请从以下 A,B,C,D 选项中选择一项 )1.线性表是 ( A )。

(A)一个有限序列,能够为空;(B)一个有限序列,不可认为空;(C)一个无穷序列,能够为空;(D)一个无序序列,不可认为空。

2.对次序储存的线性表,设其长度为n,在任何地点上插入或删除操作都是等概率的。

插入一个元素时均匀要挪动表中的( A )个元素。

(A) n/2(B) n+1/2(C) n -1/2(D) n三填空题1.在次序表中做插入操作时第一检查___表能否满了 ______________。

四算法设计题1.设线性表寄存在向量A[arrsize]的前elenum个重量中,且递加有序。

试写一算法,将x插入到线性表的适合地点上,以保持线性表的有序性。

而且剖析算法的时间复杂度。

2.已知一次序表A,其元素值非递减有序摆列,编写一个函数删除次序表中剩余的值同样的元素。

3.编写一个函数,从一给定的次序表A 中删除值在 x~y(x<=y) 之间的所有元素,要求以较高的效率来实现。

提示:能够先将序表中所有在 x~y 之的元素置成一个特别的,其实不立刻除它,而后从最后向前挨次描,拥有特别的元素后,移后来面的元素将其除去。

4.性表中有 n 个元素,每个元素是一个字符,存于向量R[n] 中,写一算法,使 R 中的字符按字母字符、数字字符和其余字符的序摆列。

数据结构Java版第二章习题

数据结构Java版第二章习题

(按照自己的情况选作部分习题,不要抄袭)第二章习题顺序存储线性表一判断题1.线性表的逻辑顺序与存储顺序总是一致的。

×2.顺序存储的线性表可以按序号随机存取.√3.顺序表的插入和删除操作不需要付出很大的时间代价,因为每次操作平均只有近一半的元素需要移动。

×4.线性表中的元素可以是各种各样的,但同一线性表中的数据元素具有相同的特性,因此是属于同一数据对象。

√5.在线性表的顺序存储结构中,逻辑上相邻的两个元素在物理位置上并不一定紧邻。

×6.在线性表的顺序存储结构中,插入和删除时,移动元素的个数与该元素的位置有关。

√二单选题 (请从下列A,B,C,D选项中选择一项)1.线性表是( A).(A) 一个有限序列,可以为空;(B)一个有限序列,不能为空;(C) 一个无限序列,可以为空;(D)一个无序序列,不能为空。

2.对顺序存储的线性表,设其长度为n,在任何位置上插入或删除操作都是等概率的.插入一个元素时平均要移动表中的(A)个元素。

(A) n/2 (B)n+1/2 (C) n -1/2 (D)n三填空题1.在顺序表中做插入操作时首先检查___表是否满了______________。

四算法设计题1.设线性表存放在向量A[arrsize]的前elenum个分量中,且递增有序。

试写一算法,将x 插入到线性表的适当位置上,以保持线性表的有序性。

并且分析算法的时间复杂度。

2.已知一顺序表A,其元素值非递减有序排列,编写一个函数删除顺序表中多余的值相同的元素.3.编写一个函数,从一给定的顺序表A中删除值在x~y(x〈=y)之间的所有元素,要求以较高的效率来实现.提示:可以先将顺序表中所有值在x~y之间的元素置成一个特殊的值,并不立即删除它们,然后从最后向前依次扫描,发现具有特殊值的元素后,移动其后面的元素将其删除掉。

4.线性表中有n个元素,每个元素是一个字符,现存于向量R[n]中,试写一算法,使R 中的字符按字母字符、数字字符和其它字符的顺序排列。

数据结构第2章习题答案

数据结构第2章习题答案

第2章习题答案●习题2-11.79 62 34 57 26 482.26 34 48 57 62 793.48 56 57 62 79 344.56 57 79 345.26 34 39 48 57 62●习题2-31.ElemType delete_min(List &L){ int i,len,min;ElemType e;if(Emptylist(L){printf(‘线性表为空!\n’); exit(1);}len=LenthList(L);min=1;for(i=2;i〈=len;i++)if(GetList(L,min)〉GetList(L,i))min=i;e= GetList(L,min);DeleteList(L,e,min);InsertList(L,GetList(L,LenthList(L)),min);return e;}2。

bool delete_st(ListTyle &L,ElemType s,ElemType t) {int i;ElemType e;if(Emptylist(L){ printf(‘线性表为空!\n’); return false;}i=1;while(i〈=LenthList(L)){If(GetList(L,i)>=s&&GetList(L,i)<=t)DeleteList(L,e,i);elsei++;}return ture;}void MergeList(List La ,List Lb ,List &Lc ) {InitList(Lc);int i=j=1 , k=0, La_len , Lb_len;ElemType a , b;La_len = LenthList (La); Lb_len=LenthList (Lb);While (( i<=La_len)&& (j<=Lb_len )){a=GetList(La ,i );b=GetList( Lb , j );if (a〈=b ){ InsertList (Lc ,a, ++k ) ;++i ; }else { InsertList ( Lc , b ,++k ) ;++j ; }}while (i〈=La_len){ a=GetList( La ,i++ ) ; InsertList ( Lc ,a, ++k ); }while (j〈=Lb_len ){ b=GetList(Lb , j++ ) ;InsertList ( Lc , b,++k );}}//MergeList习题2—42。

数据结构第二章习题

数据结构第二章习题

数据结构第二章习题第2章线性表一、单项选择题1.线性表就是具备n个_________的非常有限序列。

a.表元素b.字符c.数据元素d.数据项2.线性表是_________。

a.一个非常有限序列,可以为空b.一个非常有限序列,不可以为空c.一个无穷序列,可以为空d.一个无穷序列,不可以为空3.线性表使用链表存储时,其地址_________。

a.必须是连续的b.一定是不连续的c.部分地址必须是连续的d.连续与否均可以4.链表不具备的特点是_________。

a.可以随机出访任一结点b.填入删掉不须要移动元素c.不必事先估算存储空间d.所须要空间与其长度成正比5.设立线性表存有n个元素,以下操作方式中,_________在顺序单上同时实现比在链表上同时实现效率更高。

a.输出第i(1≤i≤n)个元素值b.互换第1个元素与第2个元素的值c.顺序输入这n个元素的值d.输出与给定值x相等的元素在线性表中的序号6.设立线性表中存有2n个元素,以下操作方式中,_________在单链单上同时实现Obrero在顺序单上同时实现效率更高。

a.删掉选定的元素b.在最后一个元素的后面插入一个新元素c.顺序输出前k个元素d.互换第i个元素和第2n-i-1个元素的值(i=0,1…,n-1)7.如果最常用的操作是取第i个结点及其前驱,则采用_________存储方式最节省时间。

a.单链表中b.双链表中c.单循环链表d.顺序表8.与单链表相比,双链表的优点之一是_________。

a.填入和删掉操作方式更直观b.可以展开随机出访c.可以省略字段指针或表尾指针d.出访前后相连结点更有效率9.率先垂范结点的单链表中l为觑的认定条件就是_________。

a.l==nullb.l->next==nullc.l->next==ld.l!=null10.在一个具备n个结点的有序单链表填入一个崭新结点并仍然维持有序的时间复杂度就是_________。

数据结构课后习题及解析第二章

数据结构课后习题及解析第二章

第二章习题1. 描述以下三个概念的区别:头指针,头结点,首元素结点。

2. 填空:(1)在顺序表中插入或删除一个元素,需要平均移动元素,具体移动的元素个数与有关。

(2)在顺序表中,逻辑上相邻的元素,其物理位置相邻。

在单链表中,逻辑上相邻的元素,其物理位置相邻。

(3)在带头结点的非空单链表中,头结点的存储位置由指示,首元素结点的存储位置由指示,除首元素结点外,其它任一元素结点的存储位置由指示。

3.已知L是无表头结点的单链表,且P结点既不是首元素结点,也不是尾元素结点。

按要求从下列语句中选择合适的语句序列。

a. 在P结点后插入S结点的语句序列是:。

b. 在P结点前插入S结点的语句序列是:。

c. 在表首插入S结点的语句序列是:。

d. 在表尾插入S结点的语句序列是:。

供选择的语句有:(1)P->next=S;(2)P->next= P->next->next;(3)P->next= S->next;(4)S->next= P->next;(5)S->next= L;(6)S->next= NULL;(7)Q= P;(8)while(P->next!=Q) P=P->next;(9)while(P->next!=NULL) P=P->next;(10)P= Q;(11)P= L;(12)L= S;(13)L= P;4. 设线性表存于a(1:arrsize)的前elenum个分量中且递增有序。

试写一算法,将X插入到线性表的适当位置上,以保持线性表的有序性。

5. 写一算法,从顺序表中删除自第i个元素开始的k个元素。

6. 已知线性表中的元素(整数)以值递增有序排列,并以单链表作存储结构。

试写一高效算法,删除表中所有大于mink且小于maxk的元素(若表中存在这样的元素),分析你的算法的时间复杂度(注意:mink和maxk是给定的两个参变量,它们的值为任意的整数)。

数据结构练习题 第二章 线性表 习题及答案

数据结构练习题 第二章  线性表 习题及答案
{ p=head;j=0;
while(________________)
{ p=p->next; j++; }
if(i==j) return(p);
else return(NULL);
}
26.以下为单链表的定位运算,分析算法,请在____处填上正确的语句。
int locate_lklist(lklist head,datatype x)
if(________)return(i);
else return(0);
}
15.对于顺序表的定位算法,若以取结点值与参数X的比较为标准操作,平均时间复杂性量级为________。求表长和读表元算法的时间复杂性为________。
16.在顺序表上,求表长运算LENGTH(L)可通过输出________实现,读表元运算
36.当且仅当两个串的______相等并且各个对应位置上的字符都______时,这两个串相等。一个串中任意个连续字符组成的序列称为该串的______串,该串称为它所有子串的______串。
37.串的顺序存储有两种方法:一种是每个单元只存一个字符,称为______格式,另一种是每个单元存放多个字符,称为______格式。
2.为了满足运算的封闭性,通常允许一种逻辑结构出现不含任何结点的情况。不含任何结点的线性结构记为______或______。
3.线性结构的基本特征是:若至少含有一个结点,则除起始结点没有直接______外,其他结点有且仅有一个直接______;除终端结点没有直接______外,其它结点有且仅有一个直接______.
① 数据元素 ② 数据项 ③ 数据 ④ 数据结构
4.顺序表是线性表的 ( )
①链式存储结构 ②顺序存储结构 ③ 索引存储结构 ④ 散列存储结构

数据结构(Java)复习题及答案2线性表

数据结构(Java)复习题及答案2线性表

第2章线性表一、填空1.在顺序表中插入或删除一个元素,需要平均移动一半的元素,具体移动的元素个数与插入位置有关。

2.向一个长度为n的向量的第i个元素(K i< n+1)之前插入一个元素时,需向后移动n-i+1 个元素。

3.向一个长度为n的向量中删除第i个元素(K i< n)时,需向前移动n-i 个元素。

4.在顺序表中访问任意一结点的时间复杂度均为0(1),因此,顺序表也称为随机读取的数据结构。

5.顺序表中逻辑上相邻的元素的物理位置也相邻。

单链表中逻辑上相邻的元素的物理位置不一定相邻。

6.在单链表中,除了首元结点外,任一结点的存储位置由前驱节点的引用域指示。

7.在n个结点的单链表中要删除已知结点*p,需找到它的存储位置,其时间复杂度为0 (n) ______ 。

8 .链表中逻辑上相邻的元素的物理位置环一定—相连。

⑵ 在单链表中除首结点外,任意结点的存储位置都由前驱结点中的引用指示。

(3)在单链表中,设置头结点的作用是在插入或删除首结点时不必对头指针―进行处理二、判断正误V X(V) 1.链表的每个结点中都包含一个引用域。

(X ) 2.链表的物理存储结构具有同链表一样的顺序。

(X ) 3.链表的删除算法很简单,因为当删除链中某个结点后,计算机会自动将后续各个单元向前移动。

(X ) 4.顺序表的每个结点只能是一个简单类型,而链表的每个结点可以是一个复杂类型。

X ) 5.顺序表结构适宜于进行顺序存取,而链表适宜于进行随机存取。

(X ) 6.顺序存储方式的优点是存储密度大,且插入、删除运算效率高。

X ) 7.线性表在物理存储空间中也一定是连续的。

(V ) 8.线性表在顺序存储时,逻辑上相邻的元素在存储的物理位置次序上相邻。

(X ) 9.顺序存储方式只能用于存储线性结构。

X ) 10.线性表的逻辑顺序与存储顺序总是一致的。

(V ) 11.顺序存储的线性表的插入和删除操作需要付出很大的代价,因为平均每次操作有近一半的元素需要移动。

计算机二级(JAVA)数据结构与算法章节练习试卷2(题后含答案及解析)

计算机二级(JAVA)数据结构与算法章节练习试卷2(题后含答案及解析)

计算机二级(JA V A)数据结构与算法章节练习试卷2(题后含答案及解析)全部题型 2. 填空题填空题(每空2分,共30分)请将每一个空的正确答案写在答题卡上。

注意:以命令关键字填空的必须拼写完整。

1.数据元素之间______的整体称为逻辑结构。

正确答案:逻辑关系涉及知识点:数据结构与算法2.一个算法的时间复杂性是______的函数。

正确答案:算法输入规模涉及知识点:数据结构与算法3.在单链表中,NULL称为______,它不指向任何结点,只起______作用。

正确答案:空指针;标志涉及知识点:数据结构与算法4.对长度为n顺序表的删除算法,它最坏情况的时间复杂性及其量级分别是______和______,平均时间复杂性及其量级分别为______和______。

正确答案:n-1;O(n);(n-1)/2:O(n) 涉及知识点:数据结构与算法5.存储结点中数据域占用的存储量与整个结点占用的存储量之比称为______。

正确答案:存储密度涉及知识点:数据结构与算法6.一般地,二叉树可以有______种基本形态。

正确答案:5 涉及知识点:数据结构与算法7.按照排序过程涉及的存储设备的不同,排序可分为______和______。

正确答案:内部排序;外部排序涉及知识点:数据结构与算法8.评价排序算法优劣的主要标准是______和______。

正确答案:时间复杂性;算法需要的附加空间涉及知识点:数据结构与算法9.稳定的排序算法有______、______和______。

正确答案:直接插入排序:冒泡排序;归并排序涉及知识点:数据结构与算法10.第一趟排序后序列中关键字最大的记录交换到最后的排序方法是______。

正确答案:冒泡排序涉及知识点:数据结构与算法11.数据结构分为逻辑结构与存储结构,线性链表属于______。

正确答案:存储结构涉及知识点:数据结构与算法12.在树形结构中,树根结点没有______。

正确答案:前件涉及知识点:数据结构与算法13.数据的逻辑结构有线性结构和______两大类。

数据结构第二章习题答案

数据结构第二章习题答案
ห้องสมุดไป่ตู้
参考答案:(假定采用 0 舍 1 入法进行舍入)
(1) +1.7 = +1.1011001B = 0.011011B× 41, 故阶码为 1 +16 = 17 = 10001B, 尾数为+0.011011 的补
码, 即 0.011011,所以+1.7 表示为 0 10001 011011。
–0.12 = – 0.000111101B = – 0.011111B × 4–1, 故 阶 码 为 –1 + 16 =15 = 01111B, 尾 数 为 – 0.011111 的补码,即 1.100001, 所以–0.12 表示为 1 01111 100001。
+1.0:
溢出
溢出
–1.0:
溢出
1.0000000
+0.010100:
0.0101000
0.0101000
–0.010100:
1.0101000
1.1011000
+0:
0.0000000
0.0000000
–0:
1.0000000
0.0000000
5. 假定机器数为 8 位(1 位符号,7 位数值),写出下列各二进制数的补码和移码表示。
1
011…1B (231–1) > 100…0B (–231)
1
11…1B (–1) > 11…10B (–2)
1
11…1B (232–1) > 11…10B (232–2)
9.以下是一个 C 语言程序,用来计算一个数组 a 中每个元素的和。当参数 len 为 0 时,返回值应该是 0, 但是在机器上执行时,却发生了存储器访问异常。请问这是什么原因造成的,并说明程序应该如何 修改。 1 float sum_elements(float a[], unsigned len)

数据结构练习-2章(答案)精品

数据结构练习-2章(答案)精品

【关键字】活动、设计、情况、方法、条件、成就、空间、文件、模式、问题、系统、快速、沟通、执行、保持、特点、位置、关键、稳定、网络、需要、工程、方式、增量、结构、速度、关系、优先、解决、实现数据结构作业一、设n为整数,利用大“O”记号,求下列程序段的时间复杂度1、i=0;k=0;Do{ k=k*10*i; i++;} while (i<n);//2、i=1;{else}//3、x=n; //n>14、x=91;while (y>0)else// T(n)=二、选择题1 C )两大类。

A B.顺序结构、链式结构C D.初等结构、构造型结构2、以下数据结构中,哪一个是线性结构( D )?A.广义表 B. 二叉树 C. 稀疏矩阵 D. 串3、在下面的程序段中,对x的赋值语句的频度为( C )for (i=1;i<=n;i++)for (j=1;j<=n;j++)x=x+1;A. O(2n) B.O(n) C.O(n2) D.O(log2n)4、下面关于线性表的叙述中,错误的是哪一个?( B )A.线性表采用顺序存储,必须占用一片连续的存储单元。

B.线性表采用顺序存储,便于进行插入和删除操作。

C.线性表采用链接存储,不必占用一片连续的存储单元。

D.线性表采用链接存储,便于插入和删除操作。

5、某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用( D )存储方式最节省运算时间。

A.单链表 B.仅有头指针的单循环链表 C.双链表 D.仅有尾指针的单循环链表6、静态链表中指针表示的是( B ).A.内存地址 B.数组下标 C.下一元素地址 D.左、右孩子地址7、下面的叙述不正确的是( B、C )A.线性表在链式存储时,查找第i个元素的时间同i的值成正比B. 线性表在链式存储时,查找第i个元素的时间同i的值无关C. 线性表在顺序存储时,查找第i个元素的时间同i 的值成正比D. 线性表在顺序存储时,查找第i个元素的时间同i的值无关8、若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素的算法的时间复杂度为( C )(1<=i<=n+1)。

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

(按照自己的情况选作部分习题,不要抄袭)第二章习题顺序存储线性表一判断题1.线性表的逻辑顺序与存储顺序总是一致的。

×2.顺序存储的线性表可以按序号随机存取。

√3.顺序表的插入和删除操作不需要付出很大的时间代价,因为每次操作平均只有近一半的元素需要移动。

×4.线性表中的元素可以是各种各样的,但同一线性表中的数据元素具有相同的特性,因此是属于同一数据对象。

√5.在线性表的顺序存储结构中,逻辑上相邻的两个元素在物理位置上并不一定紧邻。

×)6.在线性表的顺序存储结构中,插入和删除时,移动元素的个数与该元素的位置有关。

√二单选题(请从下列A,B,C,D选项中选择一项)1.线性表是( A ) 。

(A) 一个有限序列,可以为空;(B) 一个有限序列,不能为空;(C) 一个无限序列,可以为空;(D) 一个无序序列,不能为空。

2.对顺序存储的线性表,设其长度为n,在任何位置上插入或删除操作都是等概率的。

插入一个元素时平均要移动表中的(A)个元素。

(A) n/2 (B) n+1/2 (C) n -1/2 (D) n{三填空题1.在顺序表中做插入操作时首先检查___表是否满了______________。

四算法设计题1.设线性表存放在向量A[arrsize]的前elenum个分量中,且递增有序。

试写一算法,将x 插入到线性表的适当位置上,以保持线性表的有序性。

并且分析算法的时间复杂度。

2.已知一顺序表A,其元素值非递减有序排列,编写一个函数删除顺序表中多余的值相同的元素。

3.编写一个函数,从一给定的顺序表A中删除值在x~y(x<=y)之间的所有元素,要求以较高的效率来实现。

提示:可以先将顺序表中所有值在x~y之间的元素置成一个特殊的值,并不立即删除它们,然后从最后向前依次扫描,发现具有特殊值的元素后,移动其后面的元素将其删除掉。

4.线性表中有n个元素,每个元素是一个字符,现存于向量R[n]中,试写一算法,使R 中的字符按字母字符、数字字符和其它字符的顺序排列。

要求利用原来的存储空间,元素移动次数最小。

(研54)5.线性表用顺序存储,设计一个算法,用尽可能少的辅助存储空间将顺序表中前m个元素和后n个元素进行整体互换。

即将线性表(a1, a2, … , a m, b1, b2, … , b n)改变为:?(b1, b2, … , b n , a1, a2, … , a m)。

五上机实习题目约瑟夫环问题约瑟夫环问题:设编号为1,2,3,……,n的n(n>0)个人按顺时针方向围坐一圈,每个人持有一个正整数密码。

开始时任选一个正整数做为报数上限m,从第一个人开始顺时针方向自1起顺序报数,报到m是停止报数,报m的人出列,将他的密码作为新的m 值,从他的下一个人开始重新从1报数。

如此下去,直到所有人全部出列为止。

令n最大值取30。

要求设计一个程序模拟此过程,求出出列编号序列。

package算法设计;%importimportimportpublic class YueSeFu {public static void main(String[] args) {Scanner scan = new Scanner;"请输入总人数:");int totalNum = ();"请输入报数的大小:");<int cycleNum = ();yuesefu(totalNum, cycleNum);();}public static void yuesefu(int totalNum, int countNum) {链表中最常用的操作是在最后一个元素之后插入一个元素和删除最后一个元素,则采用( D )存储方式最节省运算时间。

(A)单链表(B)双链表(C)单循环链表—(D)带头结点的双循环链表5.循环链表的主要优点是( D ) 。

(A)不在需要头指针了(B)已知某个结点的位置后,能够容易找到他的直接前趋(C)在进行插入、删除运算时,能更好的保证链表不断开(D)从表中的任意结点出发都能扫描到整个链表6.下面关于线性表的叙述错误的是( B )。

(A)线性表采用顺序存储,必须占用一片地址连续的单元;(B)`(C)线性表采用顺序存储,便于进行插入和删除操作;(D)线性表采用链式存储,不必占用一片地址连续的单元;(E)线性表采用链式存储,不便于进行插入和删除操作;7.单链表中,增加一个头结点的目的是为了(C)。

(A) 使单链表至少有一个结点(B)标识表结点中首结点的位置(C)方便运算的实现(D) 说明单链表是线性表的链式存储8.若某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用(D)存储方式最节省运算时间。

(A) 单链表(B) 仅有头指针的单循环链表(C) 双链表(D) 仅有尾指针的单循环链表9.若某线性表中最常用的操作是取第i个元素和找第i个元素的前趋元素,则采用()存储方式最节省运算时间(C)。

—(A) 单链表(B) 顺序表(C) 双链表(D) 单循环链表三填空题1.带头结点的单链表H为空的条件是__ H->next == NULL _____。

1.非空单循环链表L中*p是尾结点的条件是___ p->next == L________。

3.在一个单链表中p所指结点之后插入一个由指针f所指结点,应执行s->next=__ p->next ___;和p->next=____s_________的操作。

4.在一个单链表中p所指结点之前插入一个由指针f所指结点,可执行以下操作:s->next=_ p->next _______;p->next=s;}t=p->data;p->data=___ s->data ________;s->data=____t_______;四算法设计题1. 已知带头结点的单链表L中的结点是按整数值递增排列的,试写一算法,将值为x 的结点插入到表L中,使得L仍然有序。

并且分析算法的时间复杂度。

package xiti;class Lii{int data;Lii next;public Lii(){'data=0;}public Lii(int id){data=id;}public void display(){" ");}}class Lii_2{《public Lii first;public Lii_2(){first=new Lii();}public boolean isEmpty(){return ==null);}public boolean insert_2(int id){Lii newnode =new Lii(id);Lii p=first;;while!=null&& p=;=;=newnode;return true;}public void listdisplay(){Lii p=first;"显示链表:");while(p!=null){();!p=;}"**************");}}public class L{public static void main(String[] args){Lii_2 s1=new Lii_2();for(int i=1;i<=9;i=i+2){(i);*}();(2);();}}时间复杂度:O(elenum)2. 假设有两个已排序的单链表A和B,编写一个函数将他们合并成一个链表C而不改变其排序性。

package xiti1;/class link{intdata;假设长度大于1的循环单链表中,既无头结点也无头指针,p为指向该链表中某一结点的指针,编写一个函数删除该结点的前趋结点。

4. 已知两个单链表A和B分别表示两个集合,其元素递增排列,编写一个函数求出A和B 的交集C,要求C同样以元素递增的单链表形式存储。

package xiti;class link {public int data;设有一个双向链表,每个结点中除有prior、data和next域外,还有一个访问频度freq域,在链表被起用之前,该域其值初始化为零。

每当在链表进行一次Locata(L,x)运算后,令值为x的结点中的freq域增1,并调整表中结点的次序,使其按访问频度的递减序列排列,以便使频繁访问的结点总是靠近表头。

试写一个算法满足上述要求的Locata(L,x)算法。

五上机实习题目1.]2.一元多项式的相加提示:(1)一元多项式的表示问题:对于任意一元多项式:P n(x)= P0+ P1X1+ P2X2+ … + P i X i+ … + P n X n可以抽象为一个由“系数-指数”对构成的线性表,且线性表中各元素的指数项是递增的:P=( ( P0,0), ( P1,1), ( P2,2), … , ( P n,n) )(2 ) 用一个单链表表示上述线性表,结点结构为:typedef sturct node Array { float coef; /*系数域*/、int exp; /*指数域*/struct node *next; /*指针域*/} Ploy Node;package 一元多项式的加法;import 一元多项式的加法.;public class LinkedAdd {public Node add(Elem e1,Elem e2){Node pre=();,Node qre=();Node p=;Node q=;Node result=p;while(p!=null && q!=null){if<{pre=p;p=;}else if>{Node temp=;#=q;=p;q=temp;}else{=+;if==0){=;p=;}else{pre=p;)p=;}=;q=;}}if(q!=null){=q;}return result;:}public static void main(String[] args) { Elem node1=new Elem();(7,0);(12,3);(2,8);(5,12);Elem node2=new Elem();(4,1);~(6,3);(2,8);(5,20);(7,28);LinkedAdd l=new LinkedAdd();Node node=(node1, node2);while(node!=null){"coef:"++" exp:"+;node=;})}}package 一元多项式的加法;class Elem{public class Node{public int coef;//系数public int exp;//指数public Node next=null;//下一个节点public Node(){…coef=0;exp=0;}public Node(int coef,int exp){=coef;=exp;}}public Node first=new Node();public void insert(int coef,int exp){//添加节点Node node=new Node(coef,exp);if(first==null){=node;}else{Node temp=first;while!=null){temp=;}=node;}}public Node getNode(){return first;}}。

相关文档
最新文档