ImageVerifierCode 换一换
格式:DOCX , 页数:55 ,大小:55.23KB ,
资源ID:4319744      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4319744.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(南工大第二章线性表.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

南工大第二章线性表.docx

1、南工大第二章线性表数据结构与算法上机作业第二章 线性表一、选择题1、若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新的元素算法的时间复杂度为 c 。 A. O(log2n) B. O(1) C. O(n) D. O(n2)2、以下关于线性表的说法中,不正确的是 c 。 A. 线性表中的数据元素可以是数字、字符、结构等不同类型 B. 线性表中包含的数据元素个数不是任意的 C. 线性表中的每一个结点都有且只有一个直接前驱和直接后继 D. 存在这样的线性表:表中各结点都没有直接前驱和直接后继3、在有n个结点的顺序表上做插入、删除结点运算的时间复杂度为 b 。 A. O(1) B. O(n

2、) C. O(n2) D. O(log2n)4、等概率情况下,在有n个结点的顺序表上做插入结点操作,需平均移动的结点数目为 d 。 A. n B. (n-1)/2 C. n/2 D. (n+1)/25、在一个长度为n的顺序存储的线性表中查找值为x的元素时,平均查找长度(及x同元素的平均比较次数,假定查找每个元素的概率都相等)为 b 。 A. n B. n/2 C. (n+1)/2 D. (n-1)/26、在顺序表中,只要知道 d ,就可以求出任一结点的存储地址。 A. 基地址 B. 结点大小 C. 向量大小 D. 基地址和结点大小7、将两个各有n个元素的有序表归并为一个有序表,其最少的比较次数

3、是 a 。 A. n B. 2n-1 C. 2n D. n-18、线性表采用链表存储时其存储地址要求 d 。 A. 必须是连续的 B. 部分地址必须是连续的 C. 必须是不连续的 D. 连续的和不连续的都可以9、下面关于线性表的描述中,错误的是 d 。A. 线性表采用顺序存储,必须占用一片连续的存储单元B. 线性表采用顺序存储,便于进行插入和删除操作C. 线性表采用链式存储,不必占用一片连续的存储单元D. 线性表采用链式存储,便于插入和删除操作10、向具有n个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度是 b A. O(1) B. O(n) C. O(n2) D. O(log2n)1

4、1、在一个带头结点的单链表HL中,若要向表头插入一个由指针p指向的结点,则执行的语句是 B 。 A. HL=p; p-next=HL; B. p-next=HL; HL=p; C. p-next=HL; p=HL; D. p-next=HL-next; HL-next=p;12、在一个单链表HL中,若要删除由指针q所指向结点的后继结点,则执行的语句是 C 。 A. p=q-next; p-next=q-next; B. p=q-next; q-next=p; C. p=q-next; q-next=p-next; D. q-next=q-next-next; q-next=q;13、设有编号为

5、1, 2, 3, 4的4辆列车,顺序进入一个栈结构的站台,下列不可能的出栈顺序为 D 。 A. 1234 B. 1243 C. 1324 D. 142314、4个元素按A, B, C, D顺序进入S栈,执行两次Pop(S, x)运算后,栈顶元素的值是 B 。 A. A B. B C. C D. D15、从一个栈顶指针为top的链栈中删除一个结点时,用x保存被删除的结点,应执行下列 D 命令。 A. x=top; top=top-next; B. top=top-next; x=top-data; C. x=top-data; D. x=top-data; top=top-next;16、向顺序

6、栈中输入元素时 B 。 A. 先存入元素,后移动栈顶指针 B. 先移动栈顶指针,后存入元素 C. 谁先谁后无关紧要 D. 同时进行17、设有一个顺序栈,元素A, B, C, D, E, F依次进栈,如果6个元素出栈的顺序是B, D, C, F, E, A,则栈的容量至少为 A 。 A. 3 B. 4 C. 5 6. 618、设已将元素A, B, C依次入栈,元素D正等待进栈。那么下列4个序列中不可能出现的出栈顺序为 A 。 A. CADB B. CBDA C. CDBA D. DCBA19、栈和队列的相同之处是 C 。 A.元素的进出满足先进后出 B.元素的进出满足后进先出 C.只允许在端点进

7、行插入和删除操作 D.无共同点 20、设栈S 和队列Q 的初始状态为空,元素e1,e2,e3,e4,e5 和e6 依次通过栈,一个元素出栈后即进入队列Q,若6 个元素出队的序列是e2,e4,e3,e6,e5,e1,则栈S 的容量至少应该是 C 。 A. 6 B. 4 C. 3 D. 2 21、队列通常采用的两种存储结构是( A)。A. 顺序存储结构和链式存储结构 B.散列方式和索引方式C. 链表存储结构和线性存储结构 D.线性存储结构和非线性存储结构22、循环队列SQ队满的条件是 B 。 A. SQ-rear=SQ-front B. (SQ-rear+1)%MAXLEN=SQ-front C.

8、 SQ-rear+2 = SQL-front D. (SQ-rear+2)%MAXLEN=SQL-front23、若用一个大小为6的数组来实现循环队列,且当前front和rear的值分别为3和0,当从队列中删除一个元素,再加入两个元素后,front和rear的值分别为 B 。 A. 5和1 B. 4和2 C. 2和4 D. 1和524、链栈与顺序栈相比,有一个较为明显的优点是 A 。 A. 通常不会出现满栈的情况 B. 通常不会出现栈空的情况 C. 插入操作更加方便 D. 删除操作更加方便25、设用一个大小为M=60的顺序表AM表示一个循环队列,如果当前的尾指针rear=32,头指针front

9、=15,则当前循环队列的元素的个数为 C 。 A. 42 B. 17 C. 18 D. 4126、串是一种特殊的线性表,其特殊性体现在 D 。 A. 可以顺序存储 B. 数据元素是一个字符 C. 可以链式存储 D. 数据元素可以是多个字符27、设主串的长度为n,模式串的长度为m,则串匹配的KMP算法的时间复杂度为 C 。 A. O(m) B. O(n) C. O(m+n) D. O(mn)28、已知串S=“abab”,其Next数组值为 B 。 A. 0123 B. 0121 C. 0112 D. 012229、若字符串“ABCDEFG”采用不带表头的链式存储,每个结点保存一个字符。假设每个字

10、符占用1个字节,每个指针占用两个字节,则该字符串的存储密度为 D 。 A. 20% B. 40% C. 50% D. 33.3%30、在双向链表中,在指针p所指的结点前插入一个指针q所指向的结点,操作是 A 。 A. p-Prior=q; q-Next=p; p-Prior-next=q; q-Prior=q; B. p-Prior=q; p-Prior-next=q; q-next=p; q-Prior=p-Prior; C. q-Next=p; q-Prior=p-Prior; p-Prior-Next=q; p-Prior=q; D. q-Prior=p-Prior; q-Next=q;

11、 p-Prior=q; p-Next=q;31、已知循环队列存储在一维数组A0n-1中,且队列非空时front和rear分别指向对头元素和队尾元素,且要求第一个进入队列的元素存储在A0处,则初始时front和rear的值分别是 D 。 A. 0, 0 B. 0, n-1 C. n-1, 0 D. n-1, n-132、某队列允许在两端进行入队操作,但仅允许在一端进行出队操作(称为输出受限的双端队列),若a, b, c, d, e元素依次进队,则不可能得到的顺序是 C 。 A. bacde B. dbace C. dbcae D. ecbad33、在双向链表中间插入一个结点时,需要修改 D 个指

12、针域。 A. 1 B. 2 C. 3 D. 434、在按行优先顺序存储的三元组表中,下述陈述错误的是 D 。 A. 同一行的非零元素,是按列号递增次序存储的 B. 同一列的非零元素,是按行号递增次序存储的 C. 三元组表中三元组行号是非递减的 D. 三元组表中三元组列号是非递减的35、在稀疏矩阵的三元组表示法中,每个三元组表示 D 。 A. 矩阵中非零元素的值 B. 矩阵中数据元素的行号和列号 C. 矩阵中数据元素的行号、列号和值 D. 矩阵中非零数据元素的行号、列号和值36、对特殊矩阵采用压缩存储的目的主要是为了 C 。 A. 表达变得简单 B. 对矩阵元素的存取变得简单 C. 去掉矩阵中的

13、多余元素 C. 减少不必要的存储空间37、广义表是线性表的推广,它们之间的区别在于 A 。 A. 能否使用子表 B. 能否使用原子项 C. 表的长度 D. 是否能为空38、已知广义表(a, b, c, d)的表头是 A ,表尾是 D 。 A. a B. () C. (a, b, c, d) D. (b, c, d)39、下面说法不正确的是 A 。 A. 广义表的表头总是一个广义表 B. 广义表的表尾总是一个广义表 C. 广义表难以用顺序存储结构表示 D. 广义表可以是一个多层次的结构40、若广义表A满足Head(A)=Tail(A),则A为 C 。 A. ( ) B. () C. ( ),(

14、) D. ( ), ( ), ( )二、填空题1、线性表中结点的集合是有限的,结点之间的关系是 一对一 关系。2、顺序表中访问任一个结点的时间复杂度为 O(1) 。3、线性表中第一个结点没有直接前驱,称为 头 结点。4、在一个长度为n的顺序表中删除第i个元素,要移动 n-i 个元素。5、在一个长度为n的顺序表中,如果要在第i个元素前插入一个元素,要后移 n-i+1 个元素,在插入操作中,移动元素的均值为 (n+1)/2 。6、根据线性表的链式存储结构中每一个结点包含的指针个数,将线性链表分成 单向链表 和 双向链表 。7、链式存储的特点是利用 指针 来表示数据元素之间的逻辑关系。8、静态链表(

15、线性表的游标实现)是指用 游标/数组下标 表示单链表的指针。9、在静态链表中,一般都有一个变量available表示的结点链,其中的结点为 空闲节点 。10、在栈中,可进行插入和删除操作的一端称 栈顶 。11、在进栈运算时,应先判别栈是否 为满 。在出栈运算时应先判别栈是否 为空 。当栈中元素为n个时,进栈运算时发生上溢,则说明该栈的最大容量为 n 。12、设有一空栈,现有输入序列为1, 2, 3, 4, 5,经过push, push, pop, push, pop, push, push, pop, pop之后,输出序列为 push 。13、对于循环向量的循环队列,求队列长度的公式为 (re

16、ar-front+n+1)%n 。14、栈的逻辑特点是 先进后出 。队列的逻辑特点是 先进先出 。两者的共同特点是只允许在它们的 端点 出插入和删除数据元素,区别是 栈在顶点进行插入和删除,而队列在队首进行删除,在队尾进行插入 。15、链队列LQ为空时,LQ-front-next= NULL/LQ-rear .16、在一个链队列中,若队首指针为front,队尾指针为rear,则判断该队列只有一个结点的条件为 front-rear=1/front-next=rear 。17、设串S=“Ilikecomputer”,T=“com”,则Length(S)= 14 。Index(S, T)= 6 。1

17、8、在KMP算法中,nextj只与主窜S 串有关,而与 子串 无关。19、字符串“ababaab“的Next数组值是 0121301 。20、稀疏矩阵一般压缩存储的方式有三种,分别是 三元组存储,行指针链表 、 和 十字链表 。21、二维数组M中每个元素的长度是3字节,行下标i从07,列下标j从09,从首地址&M00开始连续存放在存储器中。若按行优先的方式存放,元素M75的起始地址为 SA+225 ;若按列优先方式存放,元素M75的起始地址为 SA+141 。22、广义表(a, (a, b), d, e, (i, j), k)的长度是 6 ,深度是 3 。23、设广义表A( ), (a, (b

18、), c),则Cal(Cdr(Cal(Cdr(Cal(A)= (b) 三、写一个算法合并两个已排序的线性表。(用两种方法:数组表示的线性表(顺序表)和指针表示的线性表(链表) 要求:1、定义线性表节点的结构,并定义节点的型和位置的型。 2、定义线性表的基本操作 3、在1,2的基础上,完成本题。 4、在main函数中进行测试:先构建两个有序的线性表,然后合并这两个线性表。#includeusing namespace std;int main() int a10 = 0,1,2,3,4; int b5 = 5,6,7,8,9; for (int i = 5; i 10; i+) ai = bi

19、- 5; for (int i = 0; i 10; i+) cout ai ; system(pause); return 0;#include using namespace std;struct ListNode int m_nValue; ListNode *m_pNext;/合并两个有序链表,非递归方法 ListNode *MergeTwoList(ListNode *pListOneHead, ListNode *pListTwoHead) if (pListOneHead = NULL) return pListTwoHead; if (pListTwoHead = NULL)

20、return pListOneHead; ListNode *pNode1 = pListOneHead; ListNode *pNode2 = pListTwoHead; ListNode *pMergeListHead = NULL; ListNode *pCurLastNode = NULL; if (pNode1-m_nValue m_nValue) pMergeListHead = pListOneHead; pNode1 = pNode1-m_pNext; pCurLastNode = pMergeListHead; else pMergeListHead = pListTwoHe

21、ad; pNode2 = pNode2-m_pNext; pCurLastNode = pMergeListHead; while (pNode1 != NULL & pNode2 != NULL) if (pNode1-m_nValue m_nValue) pCurLastNode-m_pNext = pNode1; pCurLastNode = pNode1; pNode1 = pNode1-m_pNext; else pCurLastNode-m_pNext = pNode2; pCurLastNode = pNode2; pNode2 = pNode2-m_pNext; if (pNo

22、de1 = NULL) pCurLastNode-m_pNext = pNode2; if (pNode2 = NULL) pCurLastNode-m_pNext = pNode1; return pMergeListHead;/创建一个链表,输入从头到尾结点的值,输入-1表示结束 void CreateList(ListNode *& pHead) ListNode *pListNode = NULL; ListNode *pCurLastNode = NULL; bool isHead = true; while (1) if (isHead) pHead = new ListNode(

23、); cin pHead-m_nValue; if (pHead-m_nValue = -1) pHead = NULL; break; pHead-m_pNext = NULL; isHead = false; pCurLastNode = pHead; else pListNode = new ListNode(); cin pListNode-m_nValue; if (pListNode-m_nValue = -1) break; pListNode-m_pNext = NULL; pCurLastNode-m_pNext = pListNode; pCurLastNode = pLi

24、stNode; /从头到尾打印链表 void PrintList(ListNode *&pHead) if (pHead != NULL) ListNode *pCur = pHead; while (pCur != NULL) cout m_nValue m_pNext; cout endl; else cout 链表为空! endl; int main(int argc, int argv) ListNode *pList1Head = NULL; CreateList(pList1Head); PrintList(pList1Head); ListNode *pList2Head = N

25、ULL; CreateList(pList2Head); PrintList(pList2Head); ListNode *pMergeListHead = MergeTwoList(pList1Head, pList2Head); if (pMergeListHead != NULL) cout m_nValue endl; PrintList(pMergeListHead); system(pause); return 0;四、用STL中的vector定义一个对象vec,在vec中添加若干个元素,然后对这些元素进行排序(可以采用任意一种排序方法),并输出排序后的元素。#include #i

26、nclude #include /先自定义一个结构体 struct Test int member1; int member2;/自定义排序函数 bool SortByM1(const Test &v1, const Test &v2)/注意:本函数的参数的类型一定要与vector中元素的类型一致 return v1.member1 v2.member1;/升序排列 void MyPushback(std:vector & vecTest, const int &m1, const int &m2) Test test; test.member1 = m1; test.member2 = m2

27、; vecTest.push_back(test);void PrintVector(std:vector & vec) /* 插一句, vec.begin()对应的位置是向量的第一个位置, vec.end()对应的是vector中的最后的一个元素位置的后面的一个位置(我认为,实际上是一个无效位置) 文档上的定义:Returns an iterator referring to the past-the-end element in the vector container. */ for (std:vector:iterator it = vec.begin(); it != vec.end

28、(); it+) std:cout member1 t member2 std:endl; int main() std:vector vecTest; MyPushback(vecTest, 9, 1); MyPushback(vecTest, 8, 2); MyPushback(vecTest, 7, 3); MyPushback(vecTest, 6, 4); MyPushback(vecTest, 5, 5); MyPushback(vecTest, 4, 6); MyPushback(vecTest, 3, 7); MyPushback(vecTest, 2, 8); MyPushback(vecTest, 1, 9); /排序之前 std:cout Before Sort: std:endl; PrintVector(vecTest); std:cout 对向量中的所有元素按member1进行升序排列: std:endl; std:sort(vecTest.begin(), vecTest.end(), SortByM1); PrintVector(vecTest);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1