数据结构单元2练习
数据结构第二章 线性表练习及答案

一、选择题1、用单链表方式存储的线性表,存储每个结点需要两个域,一个是数据域,另一个是()A、当前结点所在的地址域B、指针域C、空指针域D、空闲域2、不带头结点的单链表head为空的判断条件是()A、head==NULLB、head->next==NULLC、head->data==NULLD、head!=NULL3、在一个单链表中,已知q所指结点是p所指结点的前驱结点,若在p和q之间插入s结点,则执行()A、s->next=p; q->next=s;B、p->next=s->next; s->next=p;C、q->next=s->next; s->next=p;D、p->next=s; s->next=q;4、在一个具有n个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度是()A、O(1)B、O(n)C、O(n2)D、O(nlog2n)5、一个单链表中,若删除p所指结点的后续结点,则执行()A、p->next=p->next->next;B、p=p->next; p->next=p->next->next;C、p->next=p;D、p=p->next->next;6、已知一个顺序存储的基本线性表,设每个结点需占m个存储单元,若第一个结点的地址为d1,则第i个结点的地址为()A、d1+(i-1)*mB、d1+i*mC、d1-i*mD、d1+(i+1)*m7、在n个结点的顺序表中,算法的时间复杂度是O(1)的操作是()A、访问第i个结点(1<=i<=n)和求第i个结点的直接前驱(2<=i<=n)B、在第i个结点后插入一个新结点(1<=i<=n)C、删除第i个结点(1<=i<=n)D、将n个结点从小到大排序8、下面给出的算法段是要把一个q所指新结点作为非空双向链表中的p所指结点的前驱结点插入到该双向链表中,能正确完成要求的算法段是()A、q->next=p; q->prior=p->prior; p->prior=q; p->prior->next=q;B、p->prior=q; q->next=p; p->prior->next=q; q->prior=p->prior;C、q->prior=p->prior; q->next=p; p->prior->next=q; p->prior=q;D、以上都不对9、在循环双链表的p所指结点之后插入s所指结点的操作是()A、p->next=s; s->prior=p; p->next->prior=s; s->next=p->next;B、p->next=s; p->next->prior=s; s->prior=p; s->next=p->next;C、s->prior=p; s->next=p->next; p->next=s; p->next->prior=s;D、s->prior=p; p->next->prior=s; s->next=p->next; p->next=s;10、从具有n个结点的单链表中查找其值等于x结点时,在查找成功的情况下,需平均比较()个结点。
数据结构习题答案.doc

数据结构习题答案.doc单元练习1一.判断题(下列各题,正确的请在前面的括号内打√;错误的打╳)(√)(1)数据的逻辑结构与数据元素本身的内容和形式无关。
(√)(2)一个数据结构是由一个逻辑结构和这个逻辑结构上的一个基本运算集构成的整体。
(ㄨ)(3)数据元素是数据的最小单位。
(ㄨ)(4)数据的逻辑结构和数据的存储结构是相同的。
(ㄨ)(5)程序和算法原则上没有区别,所以在讨论数据结构时可以通用。
(√)(6)从逻辑关系上讲,数据结构主要分为线性结构和非线性结构两类。
(√)(7)数据的存储结构是数据的逻辑结构的存储映像。
(√)(8)数据的物理结构是指数据在计算机内实际的存储形式。
(ㄨ)(9)数据的逻辑结构是依赖于计算机的。
(√)(10)算法是对解题方法和步骤的描述。
二.填空题(1)数据有逻辑结构和存储结构两种结构。
(2)数据逻辑结构除了集合以外,还包括:线性结构、树形结构和图形结构。
(3)数据结构按逻辑结构可分为两大类,它们是线性结构和非线性结构。
(4)树形结构和图形结构合称为非线性结构。
(5)在树形结构中,除了树根结点以外,其余每个结点只有 1 个前趋结点。
(6)在图形结构中,每个结点的前趋结点数和后续结点数可以任意多个。
(7)数据的存储结构又叫物理结构。
(8)数据的存储结构形式包括:顺序存储、链式存储、索引存储和散列存储。
(9)线性结构中的元素之间存在一对一的关系。
(10)树形结构结构中的元素之间存在一对多的关系,(11)图形结构的元素之间存在多对多的关系。
(12)数据结构主要研究数据的逻辑结构、存储结构和算法(或运算)三个方面的内容。
(13)数据结构被定义为(D,R),其中D是数据的有限集合,R是D 上的关系的有限集合。
(14)算法是一个有穷指令的集合。
(15)算法效率的度量可以分为事先估算法和事后统计法。
(16)一个算法的时间复杂性是算法输入规模的函数。
(17)算法的空间复杂度是指该算法所耗费的存储空间,它是该算法求解问题规模n的函数。
数据结构第二章习题答案

数据结构第二章习题答案数据结构第二章习题答案第一题:给定一个数组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```第四题:给定一个二叉树,判断其是否为平衡二叉树。
数据结构练习 第二章 线性表资料

数据结构练习第二章线性表一、选择题1. 下面关于线性表的叙述错误的是()。
A.线性表采用顺序存储必须占用一片连续的存储空间B. 线性表采用链式存储不必占用一片连续的存储空间C. 线性表采用链式存储便于插入和删除操作的实现D. 线性表采用顺序存储便于插入和删除操作的实现2. 设指针变量p指向单链表中结点A,若删除单链表中结点A,则需要修改指针的操作序列为()。
A.q=p->next;p->data=q->data;p->next=q->next;free(q);B. q=p->next;q->data=p->data;p->next=q->next;free(q);C. q=p->next;p->next=q->next;free(q);D. q=p->next;p->data=q->data;free(q);3. 设一维数组中有n个数组元素,则读取第i个数组元素的平均时间复杂度为()。
n) C. O(1) D. O(n2)A. O(n)B. O(nlog24.设一个有序的单链表中有n个结点,现要求插入一个新结点后使得单链表仍然保持有序,则该操作的时间复杂度为()。
A. O(logn) B. O(1) C. O(n2) D. O(n)25.设一条单链表的头指针变量为head且该链表没有头结点,则其判空条件是()。
A. head==0B.head->next==0C. head->next==headD.head!=06.设带有头结点的单向循环链表的头指针变量为head,则其判空条件是()。
A. head==0B. head->next==0C. head->next==headD. head!=07.建立一个长度为n的有序单链表的时间复杂度为()A. O(n)B. O(1)C. O(n2)D. O(logn)28.设顺序线性表中有n个数据元素,则删除表中第i个元素需要移动()个元素。
数据结构(专)阶段练习2

华东理工大学网络学院(专科)《数据结构》------第3章、第4章、第5章班级学号姓名成绩一、填空题(每空1分,共20分)1. 栈和队列是两种特殊的线性表,栈的特点是先进后出,表达式求值,栈的典型应用有和实现递归过程。
2. 在具有n个单元的循环队列中,队列满时共有n-1 个元素。
3. 若串的长度不能确定,可采用动态存储结构,为串值分配一个存储空间,同时建立一个串的描述子以指示串值的长度和串在存储空间中的位置,称该结构为堆/堆结构。
4. 稀疏矩阵一种常用的压缩存储方法称为三元组表方式,即每个三元组表中的元素由、行、列、值、三部分组成。
5. 二维数组A[10][20]采用列序为主方式存储,每个元素占10个存储单元,且A[0][0]的存储地址是2000,则A[6][12]的地址是3260 。
6.进栈序列为a,b,c,则通过出栈和进栈操作可能得到的a,b,c的不同的排列序列有5 种。
7. 广义表((a,b),c,d)的表头是(a, b) ,表尾是(c,d) 。
8.已知二维数组A[20][10]采用行序为主方式存储,每个元素占2个存储单元,并且A[10][5]的存储地址是1000,则A[18][9]的存储地址是1168 。
9. 广义表((((a),b),c),d)的表头是(((a),b),c) ,表尾是(d) 。
10. 设s=’YOU ARE JUDGING IT RIGHT OR WRONG’,顺序执行下列操作:SubString(sub1,s,1,8);SubString(sub2,s,20,5);StrCat(sub1,sub2); 则最后sub1的值为:’YOU ARE RIGHT’。
11. 假设用循环单链表实现队列,若队列非空,且队尾指针为R, 则将新结点S加入队列时,需执行下面语句:S->next=R->next ;R->next=S ;R=S 。
12.设有两个串p和q,求q在p中首次出现的位置的运算称作子串定位。
数据结构第2章 链表 练习题

1.1. 一元稀疏多项式的求导算法写出一元稀疏多项式的求导算法,用带表头结点的单链表存储该一元稀疏多项式,Lb为头指针,用类C语言描述该求导算法,不另行开辟存储空间,删除无用结点,并分析算法的时间复杂度。
该链表的数据结构如下:typedef struct LNode{float coe; //系数int exp; //指数struct LNode *next; //指针} LNode , *LinkList ;求导算法如下:void Differential(LinkList &Lb){ //求导算法pre=Lb; p=pre->next;while ( p ){if ( p->exp != 0 )//指数不等于零{p->coe = p->coe * p->exp ;p->exp = p->exp – 1 ;pre = pre->next ;}else//指数等于零{pre->next = p->next ;free ( p );}p = pre->next ;}}时间复杂度为: O(n)1.2. 单链表存储结构的排序算法排序算法:将一组整数排序成非递减有序序列。
用带头结点的单链表存储,L为头指针,用类C语言写出该排序算法,不另行开辟存储空间,并分析算法的时间复杂度。
该单链表的数据结构如下:typedef struct LNode{int data; //数据域struct LNode *next; //指针域} LNode , *LinkList ;void Sort(LinkList &L){ //排序算法如下:将L排序成非递减单链表q=L; p=q->next->next; q->next->next=NULL;while(p){While(q->next && p->data >= q->next->data)q=q->next;s=p->next;p->next=q->next;q->next=p;p=s;q=L;}}//sort1.3. 设H为具有n(n>0,n很大且未知)个数据元素的单链表的头结点指针,试采用C语言编写一个程序,完成将单链表中第n/2个数据元素之后的全部数据元素倒置的功能。
数据结构同步训练及参考答案

1、线性表是()的有限序列。
A、数据B、数据项C、数据元素D、表元素
2、以下关于线性表的说法不正确的是()。
A、线性表中的数据元素可以是数字、字符、记录等不同类型。
B、线性表中包含的数据元素个数不是任意的。
C、线性表中的每个结点都有且只有一个直接前驱和直接后继。
D、存在这样的线性表:表中各结点都没有直接前驱和直接后继。
C、数据的存储结构、数据的运算、数据的描述
D、数据的逻辑结构、数据的运算、数据的描述
3、数据的逻辑结构包括()。
A、线性结构和非线性结构B、线性结构和树型结构
C、非线性结构和集合结构D、线性结构和图状结构
4、基本的逻辑结构包括()。
A、树型结构、图状结构、线性结构和非线性结构
B、集合结构、线性结构、树型结构和非线性结构
s++;
A、O(n)B、O(lgn)C、O(n2)D、O(n3)
二、解答题
1、简述下列概念:数据、数据元素、数据结构、逻辑结构、存储结构、线性结构、非线性结构。
2、试举一个数据结构的例子、叙述其逻辑结构、存储结构、运算三个方面的内容。
3、常用的存储表示方法有哪几种?
4、设三个函数f,g,h分别为f(n)=100n3+n2+1000 ,g(n)=25n3+5000n2,h(n)=n1.5+5000nlgn请判断下列关系是否成立:
for(i=1;i<L->length;i++)
if(L->data[i]<x)
{
①
for(j=i-1;j>=0;j--)
②
③
}
}
A、①y=x;②L->data[j-1]= L->data[j];③L->data[0]=x;
数据结构第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、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单元练习2 一.判断题(下列各题,正确的请在前面的括号内打√;错误的打╳ ) (╳)(1)线性表的链式存储结构优于顺序存储。 (╳)(2)链表的每个结点都恰好包含一个指针域。 (√)(3)在线性表的链式存储结构中,逻辑上相邻的两个元素在物理位置上并不一定紧邻。 (╳)(4)顺序存储方式的优点是存储密度大,插入、删除效率高。 (╳
)(5)线性链表的删除算法简单,因为当删除链中某个结点后,计算机会自动地将后续的各个单元向前移动。 (╳
)(6)顺序表的每个结点只能是一个简单类型,而链表的每个结点可以是一个复杂类型。 (√ )(7)线性表链式存储的特点是可以用一组任意的存储单元存储表中的数据元素。 (√)(8)线性表采用顺序存储,必须占用一片连续的存储单元。 ()(9)顺序表结构适宜于进行顺序存取,而链表适宜于进行随机存取。 (╳)(10)插入和删除操作是数据结构中最基本的两种操作,所以这两种操作在数组中也经常使用。
二.填空题 (1) 顺序表中逻辑上相邻的元素在物理位置上 必须 相连。 (2) 线性表中结点的集合是有限的,结点间的关系是 一对一 关系。 (3) 顺序表相对于链表的优点是:节省存取 和随机存取。 (4) 链表相对于顺序表的优点是: 插入,删除 方便。 (5) 采用 顺序 存储结构的线性表叫顺序表。 (6) 顺序表中访问任意一个结点的时间复杂度均为 o(1 。 (7) 链表相对于顺序表的优点是插入、删除方便;缺点是存储密度 小 。 (8) 在双链表中要删除已知结点*P,其时间复杂度为 o(1) 。 (9) 在单链表中要在已知结点*P之前插入一个新结点,需找到*P的直接前趋结点的地址,其查找的时间复杂度为 o(n) 。 (10) 单链表中需知道 头指针 才能遍历整个链表。 (11) 线性表中第一个结点没有直接前趋,称为 头 结点。 (12) 在一个长度为n的顺序表中删除第i个元素,要移动 n-i 个元素。 (13) 在一个长度为n的顺序表中,如果要在第i个元素前插入一个元素,要后移 n-i+1 个元素。 (14) 在无头结点的单链表中, 第一个结点的地址存放在头指针中,而其它结点的存储地址存放在 直接前驱 结点的指针域中。 (15) 当线性表的元素总数基本稳定,且很少进行插入和删除操作,但要求以最快速度存取线性表中的元素时,应采用 顺序 存储结构。 (16) 在线性表的链式存储中,元素之间的逻辑关系是通过 指针 决定的。 (17) 在双向链表中,每个结点都有两个指针域,它们一个指向其 前驱 结点,另一个指向其 后继结点。 (18) 对一个需要经常进行插入和删除操作的线性表,采用 链式 存储结构为宜。 (19) 双链表中,设p是指向其中待删除的结点,则需要执行的操作为: 。 (20) 在如图所示的链表中,若在指针P所在的结点之后插入数据域值为a和b的两个结点,则可用下列两个语句: s->next->next=p->next 和P->next=S来实现该操作。
Λ a b
三.选择题 (1)在具有n个结点的单链表中,实现( A )的操作,其算法的时间复杂度都是O(n)。 A.遍历链表或求链表的第i个结点 B.在地址为P的结点之后插入一个结点 C.删除开始结点 D.删除地址为P的结点的后继结点 (2)设a、b、c为三个结点,p、10、20分别代表它们的地址,则如下的存储结构称为( B )。
A. 循环链表 B. 单链表 C.双向循环链表 D. 双向链表 (3)单链表的存储密度( c )。 A. 大于1 B. 等于1 C.小于1 D. 不能确定 (4)已知一个顺序存储的线性表,设每个结点占m个存储单元,若第一个结点的地址为B,则第i个结点的地址为( A )。 A. B+(i-1)*m B.B+i*m C. B-i*m D. B+(i+1)*m (5)在有n个结点的顺序表上做插入、删除结点运算的时间复杂度为( B )。 A.O(1) B.O(n) C.O(n2) D.O(log2n) (6)设Llink、Rlink分别为循环双链表结点的左指针和右指针,则指针P所指的元素是双循环链表L的尾元素的条件是( D )。 A.P== L B.P->Llink== L C.P== NULL D.P->Rlink==L (7) 两个指针P和Q,分别指向单链表的两个元素,P所指元素是Q所指元素前驱的条件是( B )。 A.P->next==Q->next B.P->next== Q C.Q->next== P D.P== Q (8)用链表存储的线性表,其优点是( C )。 A. 便于随机存取 B. 花费的存储空间比顺序表少 C. 便于插入和删除 D. 数据元素的物理顺序与逻辑顺序相同 (9)在单链表中,增加头结点的目的是( B )。 A. 使单链表至少有一个结点 B. 标志表中首结点的位置
a 10 c ^ b 20 P P S C. 方便运算的实现 D. 说明该单链表是线性表的链式存储结构 (10)下面关于线性表的叙述中,错误的是( d )关系。 A.顺序表必须占一片地址连续的存储单元 B.顺序表可以随机存取任一元素 C.链表不必占用一片地址连续的存储单元 D.链表可以随机存取任一元素 (11)L是线性表,已知LengthList(L)的值是5,经DelList(L,2)运算后,LengthList(L)的值是( C )。 A.2 B.3 C.4 D.5 (12)单链表的示意图如下: L
A B C D Λ
指向链表Q结点的前趋的指针是( B )。 A.L B.P C.Q D.R (13)设p为指向单循环链表上某结点的指针,则*p的直接前驱( C )。 A.找不到 B.查找时间复杂度为O(1) C.查找时间复杂度为O(n) D.查找结点的次数约为n (14)等概率情况下,在有n个结点的顺序表上做插入结点运算,需平均移动结点的数目为( C )。 A.n B.(n-1)/2 C. n/2 D.(n+1)/2 (15)在下列链表中不能从当前结点出发访问到其余各结点的是( C )。 A.双向链表 B.单循环链表 C.单链表 D.双向循环链表 (16)在顺序表中,只要知道( D ),就可以求出任一结点的存储地址。 A.基地址 B.结点大小 C. 向量大小 D.基地址和结点大小 (17)在双链表中做插入运算的时间复杂度为(a )。 A.O(1) B.O(n) C.O(n2) D.O(log2n) (18)链表不具备的特点是( a )。 A.随机访问 B.不必事先估计存储空间 C.插入删除时不需移动元素 D.所需空间与线性表成正比 (19)以下关于线性表的论述,不正确的为(c )。 A.线性表中的元素可以是数字、字符、记录等不同类型 B.线性顺序表中包含的元素个数不是任意的 C.线性表中的每个结点都有且仅有一个直接前趋和一个直接后继 双向链表 D.存在这样的线性表,即表中没有任何结点 (20)在( B )的运算中,使用顺序表比链表好。 A.插入 B.根据序号查找 C. 删除 D.根据元素查找
P Q R 四.下述算法的功能是什么? (1) (2)
返回结点*p的直接前趋结点地址。 交换*p,*q两个结点,但p,q值不变
五. 程序填空 1.已知线性表中的元素是无序的,并以带表头结点的单链表作存储。试写一算法,删除表中所有大于min,小于max的元素,试完成下列程序填空。 Void delete (lklist head; datatype min, max) { q=head->next; while (p!=NULL) { if ((p->data<=min ) | | ( (p->data>=max ) ) {q=p; p= p->next ; } else { q->next= p->next ; Delet(p) ; p= q->next ; } } }
2. 在带头结点head的单链表的结点a之后插入新元素x,试完成下列程序填空。 struct node { elemtype data; node *next; }; void lkinsert (node *head, elemtype x) { node *s, *p; s= ;
ListNode *Demo1(LinkList L,ListNode *p) { // L是有头结点的单链表 ListNode *q=L->next; While (q && q->next!=p) q=q->next; if (q) return q; else Error(“*p not in L”); }
void Demo2(ListNode *p,ListNode *q) { // p,*q是链表中的两个结点 DataType temp; temp=p->data; p->data=q->data; q->data=temp; } s->data= ; p=head->next; while (p!=NULL) && ( p->data!=a ) __p=p->next__ ; if (p==NULL) cout<< " 不存在结点a! "; else {_____ ______; ___ __________; } }
六. 程序设计题 1. 写一个对单循环链表进行遍历(打印每个结点的值)的算法,已知链表中任意结点的地址为P 。 2. 对给定的带头结点的单链表L,编写一个删除L中值为x的结点的直接前趋结点的算法。 3. 将一个顺序表中从第i个结点开始的k个结点删除。 4.已知一个单链表,编写一个函数从单链表中删除自第i个结点起的k个结点。 5.有—个单链表(不同结点的数据域值可能相同),其头指针为head,编写一个函数计算值域为x的结点个数。 6. 有两个循环单链表,链头指针分别为head1和head2,编写一个函数将链表head1链接到链表head2,链接后的链表仍是循环链表。