数据结构第二章练习题 - 副本
数据结构练习题第二章答案
数据结构练习题第二章答案一、选择题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)特性在实际应用中的优势和局限性。
数据结构--第二章考试题库(含答案)
第2章线性表一选择题1.下述哪一条是顺序存储结构的优点?()【北方交通大学 2001 一、4(2分)】A.存储密度大 B.插入运算方便 C.删除运算方便 D.可方便地用于各种逻辑结构的存储表示2.下面关于线性表的叙述中,错误的是哪一个?()【北方交通大学 2001 一、14(2分)】A.线性表采用顺序存储,必须占用一片连续的存储单元。
B.线性表采用顺序存储,便于进行插入和删除操作。
C.线性表采用链接存储,不必占用一片连续的存储单元。
D.线性表采用链接存储,便于插入和删除操作。
3.线性表是具有n个()的有限序列(n>0)。
【清华大学 1998 一、4(2分)】A.表元素 B.字符 C.数据元素 D.数据项 E.信息项4.若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用()存储方式最节省时间。
【哈尔滨工业大学 2001二、1(2分)】A.顺序表 B.双链表 C.带头结点的双循环链表 D.单循环链表5.某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用()存储方式最节省运算时间。
【南开大学 2000 一、3】A.单链表 B.仅有头指针的单循环链表 C.双链表 D.仅有尾指针的单循环链表6.设一个链表最常用的操作是在末尾插入结点和删除尾结点,则选用( )最节省时间。
A. 单链表B.单循环链表C. 带尾指针的单循环链表D.带头结点的双循环链表【合肥工业大学 2000 一、1(2分)】7.若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个结点。
则采用()存储方式最节省运算时间。
【北京理工大学 2000一、1(2分)】A.单链表 B.双链表 C.单循环链表 D.带头结点的双循环链表8. 静态链表中指针表示的是(). 【北京理工大学 2001 六、2(2分)】A.内存地址 B.数组下标 C.下一元素地址 D.左、右孩子地址9. 链表不具有的特点是()【福州大学 1998 一、8 (2分)】A.插入、删除不需要移动元素 B.可随机访问任一元素C.不必事先估计存储空间 D.所需空间与线性长度成正比10. 下面的叙述不正确的是()【南京理工大学 1996 一、10(2分)】A.线性表在链式存储时,查找第i个元素的时间同i的值成正比B. 线性表在链式存储时,查找第i个元素的时间同i的值无关C. 线性表在顺序存储时,查找第i个元素的时间同i 的值成正比D. 线性表在顺序存储时,查找第i个元素的时间同i的值无关11. 线性表的表元存储方式有((1))和链接两种。
数据结构第2章-习题
一、填空题01、当线性表的元素总数基本稳定,且很少进行插入和删除操作,但要求以最快的速度存取线性表中的元素时,应采用存储结构。
02、线性表L=(a1,a2,…,an)用数组表示,假定删除表中任一元素的概率相同,则删除一个元素平均需要移动元素的个数是。
03、在有n个元素的顺序表中插入一个新元素,需要平均移动元素,具体移动的元素个数与和有关。
04、线性表中结点的集合是的,结点间的关系是的。
05、向一个长度为n的顺序表的第i个元素(1≤i≤n+1)之前插入一个元素时,需向后移动个元素。
06、向一个长度为n的顺序表中删除第i个元素(1≤i≤n)时,需向前移动个元素。
07、在顺序表中访问任意一结点的时间复杂度均为,因此,顺序表也称为的数据结构。
08、顺序表中逻辑上相邻的元素的物理位置相邻。
单链表中逻辑上相邻的元素的物理位置相邻。
09、在单链表中,除了首结点外,任一结点的存储位置由指示。
10、在n个结点的单链表中要删除已知结点*p,需找到它的,其时间复杂度为。
11、设单链表的结点结构为(data,next),next 为指针域,已知指针px指向单链表中data域为x的结点,指针py 指向data域为y的新结点,若将结点y插入结点x之后,则需要执行以下语句:12、在单链表中设置头结点的作用是。
13、对于一个具有n 个结点的单链表,在已知的结点*p后插入一个新结点的时间复杂度为,在给定值为x 的结点后插入一个新结点的时间复杂度为。
14、在双向循环链表中,向p所指的结点之后插入指针f所指的结点,其操作是:15、在双向链表结构中,若要求在p指针所指的结点之前插入指针为s所指的结点,则需执行下列语句:s->next=p; s->prior= ; p->prior=s; =s;16、链接存储的特点是利用来表示数据元素之间的逻辑关系。
17、对于双向链表,在两个结点之间插入一个新结点需修改的指针共个,单链表为个。
数据结构(C语言版)习题及答案第二章
习题2.1选择题1、线性表的顺序存储结构是一种(A)的存储结构,线性表的链式存储结构是一种(B)的存储结构。
A、随机存取B、顺序存取C、索引存取D、散列存取2、对于一个线性,既要求能够进行较快的插入和删除,又要求存储结构能够反映数据元素之间的逻辑关系,则应该选择(B)。
A、顺序存储方式B、链式存储方式C、散列存储方式D、索引存储方式3、已知,L是一个不带头结点的单链表,p指向其中的一个结点,选择合适的语句实现在p结点的后面插入s结点的操作(B)。
A、p->next=s ; s->next=p->next ;B、s->next=p->next ; p->next=s ;C、p->next=s ; s->next=p ;D、s->next=p ; p->next=s ;4、单链表中各结点之间的地址( C D)。
A、必须连续B、部分地址必须连续C、不一定连续D、连续与否都可以5、在一个长度为n的顺序表中向第i个元素(0<i<=n+1)之前插入一个新元素时,需向后移动(B)个元素。
A、n-iB、n-i+1C、n-i-1D、i2.2填空题1、顺序存储的长度为n的线性表,在任何位置上插入和删除操作的时间复杂度基本上都一样。
插入一个元素大约移动表中的(n/2)个元素,删除一个元素时大约移动表中的((n-1)/2)个元素。
2、在线性表的顺序存储方式中,元素之间的逻辑关系是通过(物理顺序)来体现的;在链式存储方式,元素之间的逻辑关系是通过(指针)体现的。
3、对于一个长度为n的单链表,在已知的p结点后面插入一个新结点的时间复杂度为(o(1)),在p结点之前插入一个新结点的时间复杂度为(o(n)),在给定值为e的结点之后插入一个新结点的时间复杂度为(o(n))。
4、在双向链表中,每个结点包含两个指针域,一个指向(前驱)结点,另一个指向(后继)结点。
数据结构第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 实现一个队列数据结构的基本操作,包括入队、出队、获取队首元素和判断队列是否为空。
数据结构课后习题第二章
一、选择题1. 线性表是具有n个()的有限序列。
A.数据项 B. 数据元素 C. 数据对象 D.表记录2. 以下关于线性表的说法不正确的是()。
A. 线性表中的数据元素可以是数字、字符、记录等不同类型B. 线性表中包含的数据元素个数不是任意的C. 线性表中的每个结点都有且只有一个直接前趋和直接后继D. 存在这样的线性表:表中各结点都没有直接前趋和直接后继3. 线性表的顺序存储结构是一种()的存储结构。
A. 随机存取B. 顺序存取C. 索引存取D. 散列存取4. 在顺序表中,只要知道(),就可在相同时间内求出任一结点的存储地址。
A.基地址 B. 结点大小 C. 线性表大小 D. 基地址和结点大小5. 下面关于线性表的叙述中,错误的是()。
A. 线性表采用顺序存储,必须占用一片连续的存储单元B. 线性表采用顺序存储,便于进行插入和删除操作C. 线性表采用链式存储,不必占用一片连续的存储单元D. 线性表采用链式存储,便于插入和删除操作6. 线性表采用链表存储时其存储地址要求()。
A. 必须是连续的B. 部分地址必须是连续的C. 必须是不连续的D. 连续和不连续都可以7. 一个长度为n的线性表顺序存储,向第i个元素(1<=i<=n+1)之前插入一个新元素时,需要从后向前依次后移()个元素。
A.n-i B. n-i+1 C. n-i-1 D. i8.()运算,使用顺序表比链式表好。
A. 插入B. 删除C. 根据序号查找D. 根据元素值查找9.向具有n个结点的有序单链表中插入一个新的结点并仍然有序的时间复杂度是()。
A.O(1)B.O(n)C.O(n2)D.O(㏒2n)10.在一个长度为n的顺序存储的线性表中,删除第i个元素(1<=i<=n)时,需要从前向后依次前移()个元素。
A.n-i B.n-i+1 C.n-i-1 D.i11.在一个长度为n的线性表中顺序查找值为x的元素时,平均查找长度(即x 同元素的平均比较次数,假定查找每个元素的概率都相等)为()。
数据结构第二章习题答案
数据结构第二章习题答案数据结构第二章习题答案第一题:给定一个数组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章
一、名词解释1.线性表2.顺序表3.单链表4.循环单链表5.循环双向链表二、选择题1.用单链表方式存储的线性表,存储每个结点需要两个域,一个是数据域,另一个是_________A.当前结点的所在地址B.后继结点的所在地址C.空指针域D.空闲域2.不带头结点的单链表head为空的判定条件是__________A.head==NULLB.head→next==NULLC.head→next==headD.head!=NULL3.带头结点的单链表head为空的判定条件是__________A.head==NULLB.head→next==NULLC.head→next==headD.head!=NULL4.一个顺序表的第一个元素的存储地址是100,每个元素的长度为5,则第7个元素的地址是____________A. 130B. 125C. 120D. 1355.非空的循环单链表head的尾结点(由p所指向)满足____________A.p→next==NULLB.p==NULLC.p→next==headD.p==head6.设线性链表中结点的结构为(data, next),已知指针q所指结点是指针结点p的直接前驱,若在q与p之间插入结点s,则应执行_________操作A.s→next=p→next; p→next=s;B.q→next=s; s→next=p;C.p→next=s→next; s→next=p;D.p→next=s; s→next=q;7.设线性链表中结点的结构为(data, next),已知指针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;8.设线性链表中结点的结构为(data, next),若想删除结点p的直接后继,则应执行______A.p→next=p→next→next;B.p=p→next; p→next= p→next→nextC.p→next=p→next;D.p=p→next→next;9.p指向线性链表中L的某一个结点,则在线性链表的表尾插入结点s的语句序列是_________A.while(p→next != NULL) p=p→next; p→next=s; s→next=NULL;B.while(p != NULL) p=p—next; p→next=s; s→next=NULL;C.while(p→next != NULL) p=p→next; s→next=p; p→next=NULL;D.while(p!=NULL) p=p→next→next; p→next=s; s→next=p→next;三、填空题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.循环链表
数据结构第2章习题参考答案
2.7 习题2.7.1 知识点:线性表的逻辑结构一、选择题1①线性表L= (a1, a2,…)n,下列说法正确的是(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 v=n+D 之前插入一个新元素时需向后移动(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) 。
数据结构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-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。
(完整版)数据结构课后习题及解析第二章
第二章习题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是给定的两个参变量,它们的值为任意的整数)。
(完整word版)数据结构练习题第二章线性表习题及答案
第二章线性表一.名词解释1.线性结构2。
数据结构的顺序实现 3.顺序表4。
链表5。
数据结构的链接实现6。
建表7.字符串8.串9.顺序串10。
链串二、填空题1。
为了便于讨论,有时将含n(n>=0)个结点的线性结构表示成(a1,a2,……a n),其中每个a i代表一个______。
a1称为______结点,a n称为______结点,i称为a i在线性表中的________或______。
对任意一对相邻结点a i、a i┼1(1<=i<n),a i称为a i┼1的直接______a i┼1称为a i的直接______。
2.为了满足运算的封闭性,通常允许一种逻辑结构出现不含任何结点的情况.不含任何结点的线性结构记为______或______。
3.线性结构的基本特征是:若至少含有一个结点,则除起始结点没有直接______外,其他结点有且仅有一个直接______;除终端结点没有直接______外,其它结点有且仅有一个直接______。
4.所有结点按1对1的邻接关系构成的整体就是______结构.5.线性表的逻辑结构是______结构。
其所含结点的个数称为线性表的______,简称______。
6.表长为O的线性表称为______7.线性表典型的基本运算包括:______、______、______、______、______、______等六种。
8.顺序表的特点是______.9.顺序表的类型定义可经编译转换为机器级。
假定每个datatype类型的变量占用k(k〉=1)个内存单元,其中,b是顺序表的第一个存储结点的第一个单元的内存地址,那么,第i个结点a i的存储地址为______。
10.以下为顺序表的插入运算,分析算法,请在______处填上正确的语句.Void insert_sqlist(sqlist L,datatype x,int i)/*将X插入到顺序表L的第i—1个位置*/{ if(st == maxsize) error(“表满");if((i〈1)||(i〉st+1))error(“非法位置");for(j=st;j〉=i;j—-)______;L.data[i—1]=x;L。
数据结构第2章作业参考答案
第二章线性表一、单项选择题1.顺序存储结构的特点是( B )。
A. 只能实现顺序存取元素的操作B. 逻辑上相邻的数据元素在存储地址上也一定相邻C. 逻辑上相邻的数据元素在存储地址上一定不相邻D. 逻辑上相邻的数据元素在存储地址上不一定相邻2.若某链表中最常用的操作是在最后一个元素之后插入一个元素和删除最后一个元素,则采用( C )最节省时间。
A. 单链表B. 双链表C. 带头结点的双循环链表D. 单循环链表3.与线性表的顺序存储不相符的特性是( A )。
A. 插入和删除操作灵活B. 需要连续存储空间C. 便于随机访问D. 存储密度大4.与线性表的链接存储不相符合的特性是( C)。
A. 便于插入、删除运算B. 存储空间动态分配C. 需要连续的存储空间D. 只能顺序查找5.链表不具有的特点是( B)。
A. 插入、删除不需要移动元素B. 可随机访问任一元素C. 不必事先估计存储空间D. 所需空间与线性长度成正比6.循环链表h的尾结点p的特点是( D )。
A.p==h->nextB. p->next== h->nextC.p==hD. p->next==h7.在一个单链表中,已知q所指向的结点是p所指向结点的前驱结点,若在q和p 之间插入s所指向的结点,则执行( C )。
A. s->next=p->next;p->next=s;B. p->next=s->next;s->next=p;C. q->next=s;s->next=p;D. p->next=s;s->next=q;8.设一个有序的顺序表中有n个结点,现要求插入一个新结点后使得顺序表仍然保持有序,则该操作的平均时间复杂度为(D )。
A. O(log2n)B. O(1)C. O(n2)D. O(n)9.对于一个线性表,若要求既能够进行较快地插入和删除,又能够反映出数据元素之间的关系,则应该( A)。
数据结构考试复习题(绝密版)-副本
一、填空题1、栈和队列的共同点是(只允许在端点处插入和删除元素)。
2、数据的逻辑结构有线性结构和(非线性结构) 两大类。
3、在最坏情况下,堆排序需要比较的次数为(O(nlog2n))4、一棵有n个结点的满二叉树有( 0 )个度为1的结点、有((n-1)/2)个分支(非终端)结点和((n+1)/2)个叶子,该满二叉树的深度为(log2n +1)。
5、n (n﹥0) 个顶点的无向图最多有(n(n-1)/2)条边,最少有0条边。
6、判定一个栈ST(最多元素为m0)为栈满的条件是(top= =m0)。
7、头结点是指:(指向链表中第一个结点(或为头结点或为首元结点) 的指针),称为头结点。
8.指出树和二叉树的三个主要差别①树的结点个数至少为1,而二叉树的结点个数可以为0;②树种结点的最大读书没有限制,而二叉树结点的最大度数不能超过2;③树的结点无左右之分,而二叉树的结点有左右之分。
9.从概念上讲,树与二叉树是两种不同的数据结构,将树转化为二叉树的基本目的是(树可采用二叉树的存储结构并利用二叉树的已有算法解决树的有关问题。
)10.若结点A有三个兄弟(包括A本身),并且B是A的双亲结点,B的度是( 4)11.若一棵具有n个结点的二叉树采用标准链接存储结构,那么该二叉树所有结点共有(n+1)个空指针域。
12.已知二叉树的前序序列为ABDEGCFHIJ,中序序列为DBGEAHFIJC,写出后序序列(DGEBHJIFCA)。
13.已知二叉树的后序序列为FGDBHECA,中序序列为BFDGAEHC ,并写出前序序列(ABDEGCEH)。
14.找出满足下列条件的二叉树答案1)先序和中序遍历,得到的结点访问顺序一样。
(无左子树)2)后序和中序遍历,得到的结点访问顺序一样。
(无右子树)3)先序和后序遍历,得到的结点访问顺序一样。
(仅一个结点的二叉树)15.一棵含有n个结点的k叉树,可能达到的最大深度和最小深度各是多少?最大n,最小┕log2n┙+116.一棵二叉树有67个结点,这些结点的度要么是0,要么是2。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数据结构》第二章练习题
1.单项选择题
2.1链表不具备的特点是()
A 可随机访问任一结点
B 插入删除不需要移动元素
C 不必事先估计存储空间
D 所需空间与其长度成正比
2.2 不带头节点的单链表head为空的判定条件是()
A head==NULL
B head->next==NULL
C head->next==head
D head!=NULL
2.3带头节点的单链表head为空的判定条件是()
A head==NULL
B head->next==NULL
C head->next==head
D head!=NULL
2.4 带头结点的双循环链表L为空的条件是()
A L==NULL
B l->next->==NULL
C L->prior==NULL
D L->next==L
2.5 非空的循环单链表head尾结点(由P所指向)满足()
A P->next==NULL
B P==NULL
C P->next==head
D P==head
2.6在双循环链表中的P所指结点之前插入s所指结点的操作是()
A p->prior=s;s->next=p;p->prior>next=s;s->prior=p->prior;
B p->prior=s;p->prior>next=s;s->next=p;s->prior=p->prior;
C s->next=p;s->prior=p->prior; p->prior=s;p->right->next=s;
D s->next=p;s->prior=p->prior;p->prior->next=s;p->prior=s;
2.7若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个结点,则采用()存储方式最节省运算时间
A 单链表
B 给出表头指针的单循环链表
C 双链表
D 带头结点的双循环链表
2.8某线性表最常用的操作时在最后一个结点之后插入一个结点或删除第一个结点,故采用()存储方式最节省运算时间
A 单链表B仅有头结点的单循环链表
C 双链表D仅有尾指针的单循环链表
2.9需要分配较大空间,插入或删除不需要移动的元素的线性表,其存储结构是()
A 单链表B静态链表C线性链表D顺序存储结构
2.10如果最常用的操作时取第i个结点及其前驱,则采用()存储方式最节省时间
A单链表 B 双链表C单循环链表D顺序表
2.11在一个具有n结点的有序单链表中插入一个新结点并仍然保持有序的时间复杂度是()
AO(1)BO(n)C(n2)DO(nlog2n)
2.12在一个长度为n(n>1)的单链表上,设有头和尾两个指针,执行()操作与链表的长度有关
A删除单链表中的第一个元素B删除单链表中的最后一个元素
C在单链表第一个元素前插入一个新元素D在单链表最后一个元素后插入一个新元素2.13设线性表有n个元素,一下算法中,()在顺序表上实现比在链表实现效率更高
A输入第i(0<=i<=n-1)个元素值B交换第0个元素与第1个元素的值C顺序输出这n个元素的值D输入与给定值x相等的元素在线性表中的序号2.14设线性表中的2n个元素,算法(),在单链表上实现要比在顺序表上实现效率高A删除所有值为x的元素B在最后一个元素的后面插入一个新元素
C顺序输出前k个元素
D交换第i个元素和第2n-i-1个元素的值(i=0,1,...,n-1)
2.15与单链表相比,双链表的优点之一是()
A插入、删除操作更简单B可以进行随机访问
C可以省略表头指针或表尾指针D顺序访问相邻点更灵活
2.16如果对线行表的运算只有4种,即删除第一个元素,删除最后一个元素,在第一个元素前面插入新元素,在最后一个元素插入新元素,则最好使用()
A只有表尾指针没有表头指针的循环单链表
B只有表尾指针没有表头指针的非循环双链表
C只有表头指针没有表尾指针的循环双链表
D 既有表头指针也有表尾指针的循环单链表
2.17如果对线性表的运算只有2种,即删除第一个元素,在最后一个元素的后面插入新元素,则最好使用()
A 只有表头指针没有表尾指针的循环单链表B只有表尾指针没有表头指针的循环单链表
C 非循环双链表
D 循环双链表
2.18设有两个长度为n的单链表,结点类型相同。
若以h1为表头指针的链表是非循环的,以h2为表头指针的链表是循环的,则()
A 对于两个链表来说,删除第一个结点的操作,其时间复杂度是O(1)
B 对于两个链表来说,删除最后一个结点的操作,其时间复杂度是O(n)
C 循环链表要比非循环链表占用更多的内存空间
D h1和h2是不同的类型的变量
2.19在长度为n的()上,删除第一个元素,其算法的时间复杂度为O(n)。
A 只有表头指针的不带表头结点的循环单链表
B 只有表尾指针的带表头结点的循环单链表
C 只有表尾指针的带表头结点的循环单链表
D 只有表头指针的带表头结点的循环单链表
2.填空题
1.向一个长度为n的顺序表中的第i个元素(0<=i<=n-1)之前插入一个元素时,需向后移动_____个元素。
2.在一个长度为n的顺序表中删除第i个元素(0<=i<=n-1)时,需向前移动_____个元素。
3.在单链表中设置头结点色作用_____。
4.在单链表中,要删除某一指定的结点,必须找到该结点的_____结点。
5.访问单链表中的结点,必须沿着_____依次进行。
6.在双链表中,每个结点有两个指针域,一个指向_____,另一个指向_____。
7.在_____链表上,删除最后一个结点,其算法的时间复杂度为O(1)。
8.在非循环的_____链表中,可以用表尾代替表头指针。
9.在一个单链表中的p所指结点之前插入一个s所指结点时,可执行如下操作:
(1)s->next=_____;
(2)P->next=s:
(3)T=p->data;
(4)P->data=_____;
(5)S->data=_____;
10.在一个单链表中删除p所指结点时,应执行以下操作:
(1)q=p->next;
(2)P->data=p->next->data;
(3)P->next=_____;
Free(q);
11.在一个单链表中p 所指向之后插入一个s 所指结点时,应执行s->next=_____和
p->next=_____的操作。
12.对于一个具有n 各结点的单链表,在*p 结点后插入一个新结点的时间复杂度是_____;
在给定值为x 的结点后插入新结点的时间复杂度是_____;
3.算法设计题
(1) 已知一个顺序表A ,其中的元素按值非递减有序排列,编写一个函数插入一个元素x 后
保持给顺序表仍按递减有序排列。
(2)从顺序表中删除所有为x 的元素。
(3)有一个不带头结点的单链表L(至少有1个结点),其头指针为head ,编写一个函数奖
L 逆置,即最后一个结点变成第一个结点,原来倒数第二个结点变成第二个结点,如此等等。
(4) 已知一个循环单链表如图2.12所示,编写一个函数将所有箭头方向取反。
head
(7)有一个有序单链表(从小到大排列),表头指针为head ,编写一个函数向该单链表中插
入一个元素为x 的结点,使插入后该链表仍然有序。
a 1 a 2 a n。