已知带头结点的动态单链表L的结点是按整数值递增排列的,试写一算法将值为x的结点插入表L中,使L仍然有序。

合集下载

算法设计

算法设计

1.试编写在带头结点的单链表中删除(一个)最小值结点的(高效)算法。

【题目分析】本题要求在单链表中删除最小值结点。

单链表中删除结点,为使结点删除后不出现“断链”,应知道被删结点的前驱。

而“最小值结点”是在遍历整个链表后才能知道。

所以算法应首先遍历链表,求得最小值结点及其前驱。

遍历结束后再执行删除操作。

LinkedList Delete(LinkedList L)∥L是带头结点的单链表,本算法删除其最小值结点。

{p=L->next;∥p为工作指针。

指向待处理的结点。

假定链表非空。

pre=L;∥pre指向最小值结点的前驱。

q=p;∥q指向最小值结点,初始假定第一元素结点是最小值结点。

while(p->next!=null){if(p->next->data<q->data){pre=p;q=p->next;} ∥查最小值结点p=p->next;∥指针后移。

}pre->next=q->next;∥从链表上删除最小值结点free(q);∥释放最小值结点空间}∥结束算法delete。

2.将两个递增的有序链表合并为一个递增的有序链表。

要求结果链表仍使用原来两个链表的存储空间, 不另外占用其它的存储空间。

表中不允许有重复的数据。

void MergeList_L(LinkList &La,LinkList &Lb,LinkList &Lc){pa=La->next; pb=Lb->next;Lc=pc=La; //用La的头结点作为Lc的头结点while(pa && pb){if(pa->data<pb->data){ pc->next=pa;pc=pa;pa=pa->next;}else if(pa->data>pb->data) {pc->next=pb; pc=pb; pb=pb->next;}else {// 相等时取La的元素,删除Lb的元素pc->next=pa;pc=pa;pa=pa->next;q=pb->next;delete pb ;pb =q;}}pc->next=pa?pa:pb; //插入剩余段delete Lb; //释放Lb的头结点}3.已知长度为n的线性表A采用顺序存储结构,请写一时间复杂度为O(n)、空间复杂度为O(1)的算法,该算法删除线性表中所有值为item的数据元素。

数据结构第2章作业 线性表(答案)

数据结构第2章作业 线性表(答案)

第2章线性表班级学号__________-姓名一、判断正误(×)1. 链表的每个结点中都恰好包含一个指针。

链表中的结点可含多个指针域,分别存放多个指针。

例如,双向链表中的结点可以含有两个指针域,分别存放指向其直接前趋和直接后继结点的指针。

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

链表的存储结构特点是无序,而链表的示意图有序。

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

链表的结点不会移动,只是指针内容改变。

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

混淆了逻辑结构与物理结构,链表也是线性表!且即使是顺序表,也能存放记录型数据。

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

正好说反了。

顺序表才适合随机存取,链表恰恰适于“顺藤摸瓜”(×)6. 顺序存储方式的优点是存储密度大,且插入、删除运算效率高。

前一半正确,但后一半说法错误,那是链式存储的优点。

顺序存储方式插入、删除运算效率较低,在表长为n的顺序表中,插入和删除一个数据元素,平均需移动表长一半个数的数据元素。

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

线性表有两种存储方式,顺序存储和链式存储。

后者不要求连续存放。

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

线性表有两种存储方式,在顺序存储时,逻辑上相邻的元素在存储的物理位置次序上也相邻。

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

顺序存储方式不仅能用于存储线性结构,还可以用来存放非线性结构,例如完全二叉树是属于非线性结构,但其最佳存储方式是顺序存储方式。

(后一节介绍)(×)10. 线性表的逻辑顺序与存储顺序总是一致的。

理由同7。

链式存储就无需一致。

数据结构习题

数据结构习题

数据结构习题1 概述一、选择题:1、下列算法的时间复杂度是()for(i=0;i<="" p="">c[i]=i;A.O(1)B.O(n)C.O(log2n)D.O(nlog2n)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、从逻辑上可以把数据结构分为()。

A.动态结构和静态结构B.紧凑结构和非紧凑结构C.线性结构和非线性结构D.内部结构和外部结构8、以下有关数据的叙述中错误的是()。

A.计算机能够处理的数据包括整数、实数、字符、声音、图像等B.数据的逻辑结构是从逻辑关系上描述数据,它取决于数据的存储方式C.数据存储结构的实现依赖于计算机语言D.数据的运算是定义在数据的逻辑结构上的9、数据的基本单位是()。

A.数据结构B.数据元素C.数据项D.文件10、下列算法的时间复杂度是()for(i=0;i<="" p="">for(j=0;j<="" p="">a[i][j]=i*j;A.O(m2)B.O(n2)C.O(m×n)D.O(m+n)11、算法分析的两个主要方面是()。

A.正确性和简明性B.数据复杂性和程序复杂性C.可读性和可维护性D.时间复杂性和空间复杂性二、填空题:1、数据结构是相互之间存在一种或多种特定关系的数据元素的集合,它包括三方面的内容,分别是数据的逻辑结构、()和()。

华南理工大学网络教育学院 数据结构同步练习册答案

华南理工大学网络教育学院  数据结构同步练习册答案

6.3 分别写出题 6.1 所示二叉树的先根,中根和后根序列。 答:先根:ABCDEFGHIJ 二叉树。 答: 由后根遍历序列得到二叉树的根结点 A (后根序列中最后一个结点) ; 在中序序列中, A 的左力是 A 的左子树上的结点,A 的右边是 A 的右子树上的结点;再到后根序列中找左子 树和右子树的根结点,依次类推,直到画出该二叉树。 中根:DCBAFEHJIG 后根:DCBFJIHGEA 6.4 已知一棵二叉树的中根序列和后根序列分别为 BDCEAFHG 和 DECBHGFA,试画出这棵
(4) int x = 91, y = 100;
while (y > 0) { if (x > 100) else x++; } 答:100 解析: x=91; //1 y=100; //1
{
x = x -10; y--;
}
while(y>0) //1101 if(x>100) //1100 { x=x-10; //100 y--; //100 } else x++; //1000 以上程序段右侧列出了执行次数。该程序段的执行时间为: T(n)=O(1)
while ( i <= n ) { k = k+10*i; i++; } 答:n-1
解析: i=1; //1 k=0; //1 while(i<n) //n { k=k+10*i; //n-1 i++; //n-1 } 由以上列出的各语句的频度,可得该程序段的时间消耗: T(n)=1+1+n+(n-1)+(n-1)=3n 可表示为 T(n)=O(n)
x++; y++;

2016新编1线性表的逻辑顺序与存储顺序总是一致的

2016新编1线性表的逻辑顺序与存储顺序总是一致的

第二章习题一判断题1.线性表的逻辑顺序与存储顺序总是一致的。

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

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

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

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

6.在线性表的链式存储结构中,逻辑上相邻的元素在物理位置上不一定相邻。

7.线性表的链式存储结构优于顺序存储结构。

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

9.线性表的链式存储结构是用一组任意的存储单元来存储线性表中数据元素的。

10.在单链表中,要取得某个元素,只要知道该元素的指针即可,因此,单链表是随机存取的存储结构。

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

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

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

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

(A) n/2 (B) n+1/2 (C) n -1/2 (D) n3.线性表采用链式存储时,其地址( ) 。

(A) 必须是连续的;(B) 部分地址必须是连续的;(C) 一定是不连续的;(D) 连续与否均可以。

4.用链表表示线性表的优点是()。

(A)便于随机存取(B)花费的存储空间较顺序存储少(C)便于插入和删除(D)数据元素的物理顺序与逻辑顺序相同5.某链表中最常用的操作是在最后一个元素之后插入一个元素和删除最后一个元素,则采用( )存储方式最节省运算时间。

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

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

《数据结构》自考同步习题

《数据结构》自考同步习题

数据结构习题集1 概述一、选择题:1、下列算法的时间复杂度是()for(i=0;i<n;i+ +)c[i]=i;A.O(1)B.O(n)C.O(log2n)D.O(nlog2n)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、从逻辑上可以把数据结构分为()。

A.动态结构和静态结构B.紧凑结构和非紧凑结构C.线性结构和非线性结构D.内部结构和外部结构8、以下有关数据的叙述中错误的是()。

A.计算机能够处理的数据包括整数、实数、字符、声音、图像等B.数据的逻辑结构是从逻辑关系上描述数据,它取决于数据的存储方式C.数据存储结构的实现依赖于计算机语言D.数据的运算是定义在数据的逻辑结构上的9、数据的基本单位是()。

A.数据结构B.数据元素C.数据项D.文件10、下列算法的时间复杂度是()for(i=0;i<m;i+ +)for(j=0;j<n;j+ +)a[i][j]=i*j;A.O(m2)B.O(n2)C.O(m×n)D.O(m+n)11、算法分析的两个主要方面是()。

A.正确性和简明性B.数据复杂性和程序复杂性C.可读性和可维护性D.时间复杂性和空间复杂性二、填空题:1、数据结构是相互之间存在一种或多种特定关系的数据元素的集合,它包括三方面的内容,分别是数据的逻辑结构、()和()。

2、数据的逻辑结构是从逻辑关系上描述数据,它与数据的()无关,是独立于计算机的。

已知带头结点的动态单链表L中的结点是按整数值递增排序的,编写算法将值为x的结点插入到表L中,使L仍然有序

已知带头结点的动态单链表L中的结点是按整数值递增排序的,编写算法将值为x的结点插入到表L中,使L仍然有序
pa=pa->next;
}
else
{
pc->next=pb;
pc=pb;
pb=pb->next;
}
}
pc->next=pa?pa:pb; //插入剩余段
n=ListLength_L(Lc);
p=new LNode1;
cin>>p->data;
p->next=L->next;L->next=p; //插入到表头
}
cout<<"链表中元素排列顺序为"<<endl;
while(p)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
//**********************************插入********9/21~9/25****************************************************
nizhi(Lc,n);
delete Lb; //释放Lb的头结点
}
//**********************************创建循环链表*********10/6*************************************************
struct LNode1 *prior;
struct LNode1 *next;
int freq;
}LNode1,*LinkList1;

《算法与数据结构》第1~3章 习题(包含了线性表、栈和队列,含答案)

《算法与数据结构》第1~3章 习题(包含了线性表、栈和队列,含答案)
{p=p1; p1=p1->next; s2=s2+1; delete(p) }; else if(p1->data>p2->data) p2=p2->next; else (p1->data==p2->data)
{ p=p1; p1=p1->next; p->next= pa->next; pa->next= p; p2= p2->next;s1=s1+1;};
的序列是e2,e4,e3,e6,e5,e1则栈S的容量至少应该是(C)。
A. 6 B. 4 C. 3 D. 2
13.若用一个大小为6的数组来实现循环队列,且当前rear和
front的值分别为0和3,当从队列中删除一个元素,再加入两个
元素后,rear和front的值分别为多少?(B)
A. 1和 5 B. 2和4 C. 4和2 D. 5和1
10. 表达式3* 2^(4+2*2-6*3)-5求值过程中当扫描到6时,对
象栈和算符栈为( D ),其中^为乘幂 。
• 3,2,4,1,1;*^(+*- B. 3,2,8;*^- C. 3,2,4,2,2;*^(-
D. 3,2,8;*^(-
算法与数据结构
第1~3章 习题课
5 /31
11.循环队列存储在数组A[0..m]中,则入队时的操作为(D)。
C. q->next=p;q->pre=p->pre;p->pre->next=q;p->pre=q;
D. q->pre=p->pre;q->next=q;p->pre=q;p->pre=q; 5.栈的特点是( B ),队列的特点是( A ),栈和队列都是 ( A )。若进栈序列为1,2,3,4 则( C )不可能是一个出栈序 列(不一定全部进栈后再出栈);若进队列的序列为1,2,3,4 则 ( E )是一个出队列序列。 ①, ②: A. 先进先出 B. 后进先出 C. 进优于出 D. 出 优于进

习题课

习题课

第一章一、填空题:1.数据结构是一门研究非数值计算程序设计中计算机的操作对象以及它们之间的关系和运算的学科。

2.从逻辑上可以把数据结构分为线性结构和非线性结构。

3.线性结构的顺序存储结构是一种随机存取的存储结构,线性结构的链式存储是一种顺序存取的存储结构。

4.线性结构中元素的关系是一对一,树形结构中元素的关系是一对多,图形结构中元素的关系是多对多。

5算法的5个重要特征是有穷性、确定性、可行性、输入、输出。

6 算法分析的两个主要方面是:时间复杂度和空间复杂度二、判断题:1、顺序存储方式只能用于线性结构、不能用于非线性结构。

×2、基于某种逻辑结构之上的运算,其实现是唯一的。

×3、数据元素是数据的最小单位。

×4、数据结构是带有结构的数据元素的集合。

√5、算法分析的目的是研究算法中的输入和输出的关系×三、分析以下程序段的时间复杂度:5.(1)i=1;k=100while(i<n){K=k+1;i+=10;}(2)i=1;j=0;while(i+j<=n)if(i>j) j++;else i++;(3)x=n;y=0;while(x>=(y+1)*(y+1))y++;(4)x=91;y=100;while(y>0)if(x>100){x-=10;y--}else x++;(5)for(i=1;i<=n;i++)for(j=1;j<=i;j++)for(k=1;k<=j;k++)x=x+y;(1)O(n)(2)O(n)(3)O(n1/2)(4)O(1)(5)O(n3)第二章一、选择题:1.带头结点的单链表head为空的判断条件是(B)A.head=NULLB.head->next=NULLC.head->next=headD.head!=NULL2. 若在线性表中做以下两个操作:(1)在最后一个元素之后插入一个元素(2)删除第一个元素在(D)存储方式最节省时间:A. 单链表B. 单循环链表C. 双向链表D. 带尾指针的单循环链表3. 若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素算法的时间复杂度为(C)。

第一部分习题答案

第一部分习题答案

第⼀部分习题答案第⼀部分习题⼀、选择1、下列叙述中关于好的编程风格,正确的描述是:CA、程序中的注释是可有可⽆的为了增强可读性我们要在必要语句之后加注释B、对递归定义的数据结构不要使⽤递归过程递归的可读性强C、递归应是封闭的,尽量少使⽤全局变量D、多采⽤⼀些技巧以提⾼程序运⾏效率2、通常从正确性、易读性、健壮性、⾼效性等四个⽅⾯评价算法(包括程序)的质量。

以下解释错误的是 ( C )A、正确性算法应能正确地实现预定的功能(即处理要求)B、易读性算法应易于阅读和理解以便于调试修改和扩充C、健壮性当环境发⽣变化时,算法能适当地做出反应或进⾏处理,不会产⽣不需要的运⾏结果见课本14页D、⾼效性即达到所需要的时间性能3、以下说法正确的是 ( D )A、数据元素是数据的最⼩单位B、数据项是数据的基本单位C、数据结构是带有结构的各数据项的集合D、数据结构是带有结构的数据元素的集合4、对于顺序表,以下说法错误的是( A )A、顺序表是⽤⼀维数组实现的线性表,数组的下标可以看成是元素的绝对地址B、顺序表的所有存储结点按相应数据元素间的逻辑关系决定的次序依次排列C、顺序表的特点是:逻辑结构中相邻的结点在存储结构中仍相邻D、顺序表的特点是:逻辑上相邻的元素,存储在物理位置也相邻的单元中5、对顺序表上的插⼊、删除算法的时间复杂性分析来说,通常以(B )为标准操作A、条件判断B、结点移动C、算术表达式D、赋值语句6、对于顺序表的优缺点,以下说法错误的是( C )A、⽆需为表⽰结点间的逻辑关系⽽增加额外的存储空间B、可以⽅便地随机存取表中的任⼀结点C、插⼊和删除运算较⽅便D、容易造成⼀部分空间长期闲置⽽得不到充分利⽤7、链表不具有的特点是:AA、可随机访问任⼀个元素B、插⼊删除不需要移动元素C、不必事先估计存储空间D、所需空间与线性表长度成正⽐8、若线性表最常⽤的操作是存取第i个元素及其前驱的值,则采⽤(D )存储⽅式节省时间A单链表B、双向链表C、单循环链表D、顺序表9、有时为了叙述⽅便,可以对⼀些概念进⾏简称,以下说法错误的是(D )A将“指针型变量”简称为“指针”B将“头指针变量”称为“头指针”C将“修改某指针型变量的值”称为“修改某指针”D将“p中指针所指结点”称为“P值”10.设指针P指向双链表的某⼀结点,则双链表结构的对称性可⽤(C )式来刻画A p->prior->next->==p->next->nextB p->prior->prior->==p->next->priorC p->prior->next->==p->next->priorD p->next->next==p->prior->prior11.以下说错误的是( A )A对循环来说,从表中任⼀结点出发都能通过前后操作⽽扫描整个循环链表B对单链表来说,只有从头结点开始才能扫描表中全部结点C双链表的特点是找结点的前趋和后继都很容易D对双链表来说,结点*P的存储位置既存放在其前趋结点的后继指针域中,也存放在它的后继结点的前趋指针域中。

数据结构试题大题编程及参考答案

数据结构试题大题编程及参考答案

数据结构试题大题编程及参考答案(总6页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--数据结构考试题参考答案1、设顺序表L中的数据元素递增有序。

试写一算法,将数据元素x插入到顺序表L的适当位置,以保持该表的有序性。

解:存储结构为:typedef struct SeqList{ DataType *data;int MaxLen;int len;}SeqList;算法如下:void insertLx(SeqList &L, DataType x){ if== return;int i=;while(i>=0 && x<[i]){ [i+1]=[i]; i=i-1;}[i+1]=x; ++;}2、试写一个算法,在带头结点的单链表L的元素x前插入一个结点y。

解:存储结构如下:typedef struct Lnode{ElemType data;struct Lnode *next;}Lnode, *LinkList;算法如下:void insert_y_before_x(LinkList L, ElemType x, ElemType y){ Lnode *q, *p=L;while(p->next && p->next->data!=x) p=p->next; //找x的前驱结点p; if(!p->next) return; // 若不存在结点x,则返回;q=new Lnode;q->data=y; q->next=p->next; p->next=q;}3、试写一个算法,统计带头指针的单链表L的元素个数。

解:存储结构如下:typedef struct Lnode{ElemType data;struct Lnode *next;}Lnode, *LinkList;算法如下:int length(LinkList L){ int len=0;Lnode *p=L;while(p) { len++; p=p->next; }return len;}注:如果单链表是带头结点的,则算法如下:int length(LinkList L){ int len=0;Lnode *p=L->next;;while(p) { len++; p=p->next; }return len;}4、试写一个算法,在带头结点的单链表L的第k个结点后插入一个结点x。

数据结构算法题(含答案)

数据结构算法题(含答案)

1、在数组A[1..n]中查找值为K的元素,若找到则输出其位置i(1<=i<=n),否则输出0作为标志。

int locate(dataytpe A[1..n],dateytpe k){ i=n;while ((I<=n)&&(A[i]!=k)) I++;if (I<=n) return(i);else return(o);}2、试编写在带头结点的单链表上实现线性表基本运算LOCATE(L,X)、find(L,i)、INSERT(L,X,i)和DELETE(L,i)的算法。

(1)定位LOCATE(L,X)int locate_lklist(lklist head,datatype x)/*求表head中第一个值等于x的的序号,不存在这种结点时结果为0*/{p=head->next;j=1; /*置初值*/while((p!=NULL)&&(p->data!=x)){p=p->next;j++}/*未达表结点又未找到值等于X的结点时经,继续扫描*/if (p->data = =x) return(j);else return(0);}(2)按序号查找find(L,i)lklist find_lklist(lklist head , int i);{ j=1; p=head->next;while((j<1)&&(p!=NULL)){p=p->next; j++}if(i= = j) return(p);else return(NULL);}(3)插入INSERT(L,X,i)void insert_lklist(lklist head,datatype x,int I)/*在表haed的第i个位置上插入一人以x为值的新结点*/{p=find_lklist(head,i-1); /*先找第i-1个结点*/if(p= =NULL) error(“不存在第i个位置”)/*若第i-1个结点不存在,退出*/else{s=malloc(size);s->data=x /*否则生成新结点*/s->next=p->next /*结点*p在链域值传给结点*s的链域*/p->next=s; /*修改*p的链域*/}}(4)删除DELDTE(L,i)void delete_lklist(lklist head,int i) /*删除表head的第i个结点*/{p=find_lklist(head,i-1) /*先找待删结点的直接前驱*/if((p!==NULL)&&(p->next!=NULL))/*若直接前趋存在且待结点存在*/(q=p->next; /*q指向待删结点*/p->next=q->next/*摘除待结点*/;free(q);/*释放已摘除结点q*/}else error(“不存在第i个结点”)/*否则给出相关信息*/}3、假设有两个按数据元素值递增有序排列的线性表A和B,均以单链表作存储结构。

编写带头结点的单链表中统计结点个数的算法。

编写带头结点的单链表中统计结点个数的算法。

编写带头结点的单链表中统计结点个数的算法。

以下是带头结点的单链表统计结点个数的算法:
1. 首先定义一个指针变量p指向链表的第一个结点。

2. 在循环中遍历整个链表,计算每个结点的个数。

在遍历过程中,将当前结点的值赋给变量num。

3. 将当前结点的指针移动到下一个结点,继续循环。

4. 如果当前结点没有对应的下一个结点,则返回结点个数的值。

5. 如果当前结点有对应的下一个结点,则将当前结点的值和下
一个结点的指针合并计算结点个数的值。

下面是实现该算法的C语言代码:
```
int count = 0; // 结点个数
int* ptr; // 指向链表的第一个结点的指针
void dfs(int node) {
ptr = node; // 将当前结点的指针指向链表的第一个结点
count++; // 计算当前结点的个数
}
int main() {
单链表头结点为*head, *p;
p = head; // 指向链表的第一个结点
int num = 0; // 用于记录每个结点的个数
dfs(p); // 遍历整个链表并计算结点个数
return 0;
}
```
该算法的时间复杂度为O(n),空间复杂度为O(n)。

其中,n是链表的结点数。

例2.2设计一个算法,将x插入到一个有序(从小到大排序)的

例2.2设计一个算法,将x插入到一个有序(从小到大排序)的

例2.4 已知长度为n的线性表A采用顺序存储结 构,编写一个时间复杂度为O(n)、空间复杂度为O(1) 的算法,该算法删除线性表中所有值为item的数据元 素。 解 : 用 k 记录顺序表 A 中等于 item 的元素个数 , 边 扫描A边统计k,并将不为item的元素前移k个位臵,最 后修改A的长度。对应的算法如下:
}
void delnode2(SqList &A,ElemType item) { int k=0,i=0; /*k记录值等于item的元素个数*/ while (i<A.length) { if (A.data[i]==item) k++; 算法2
else A.data[i-k]=A.data[i]; /*当前元素前移k个位臵*/
SqList *merge(SqList *p, SqList *q) { SqList *r; int i=0,j=0,k=0; r=(SqList *)malloc(sizeof(SqList)); while (i<p->length && j<q->length) { if (p->data[i]<q-> data[j]) { r-> data[k]=p-> data[i]; i++;k++; } else { r-> data[k]=q-> data[j]; j++;k++; } }
i++;
for (j=L->length-1;j>=i;j--) L->data[j+1]=L->data[j]; L->data[i]=x; L->length++; }

1线性表的逻辑顺序与存储顺序总是一致的

1线性表的逻辑顺序与存储顺序总是一致的

第二章习题一判断题1.线性表的逻辑顺序与存储顺序总是一致的。

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

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

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

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

6.在线性表的链式存储结构中,逻辑上相邻的元素在物理位置上不一定相邻。

7.线性表的链式存储结构优于顺序存储结构。

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

9.线性表的链式存储结构是用一组任意的存储单元来存储线性表中数据元素的。

10.在单链表中,要取得某个元素,只要知道该元素的指针即可,因此,单链表是随机存取的存储结构。

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

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

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

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

(A) n/2 (B) n+1/2 (C) n -1/2 (D) n3.线性表采用链式存储时,其地址( ) 。

(A) 必须是连续的;(B) 部分地址必须是连续的;(C) 一定是不连续的;(D) 连续与否均可以。

4.用链表表示线性表的优点是()。

(A)便于随机存取(B)花费的存储空间较顺序存储少(C)便于插入和删除(D)数据元素的物理顺序与逻辑顺序相同5.某链表中最常用的操作是在最后一个元素之后插入一个元素和删除最后一个元素,则采用( )存储方式最节省运算时间。

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

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

数据结构练习-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)。

数据结构预算法 习题解答第2章

数据结构预算法 习题解答第2章
3.简答题
1.循环队列的优点是什么?如何判别它的空和满? 循环队列的优点是能够克服“假溢满”现象。 设有循环队列 sq,队满的判别条件为: (sq->rear+1)%maxsize==sq->front;或 sq->num==maxsize。 队空的判别条件为: sq->rear==sq->front。 2.栈和队列数据结构各有什么特点,什么情况下用到栈,什么情况下用到队列? 栈和队列都是操作受限的线性表,栈的运算规则是“后进先出”,队列的运算规则是“先进先出”。栈 的应用如数制转换、递归算法的实现等,队列的应用如树的层次遍历等。 3.什么是递归?递归程序有什么优缺点? 一个函数在结束本函数之前,直接或间接调用函数自身,称为递归。例如,函数 f 在执行中,又调用 函数 f 自身,这称为直接递归;若函数 f 在执行中,调用函数 g,而 g 在执行中,又调用函数 f,这称为间 接递归。在实际应用中,多为直接递归,也常简称为递归。 递归程序的优点是程序结构简单、清晰,易证明其正确性。缺点是执行中占内存空间较多,运行效率 低。 4.设有编号为 1,2,3,4 的四辆车,顺序进入一个栈式结构的站台,试写出这四辆车开出车站的所有可 能的顺序(每辆车可能入站,可能不入站,时间也可能不等)。 1234,1243,1324,1342,1432,213,2143,2314,2341,2431,3214,3241,3421,4321
【提示】对顺序表 A,从前向后依次判断当前元素 A->data[i]是否介于 x 和 y 之间,若是,并不立即删除, 而是用 n 记录删除时应前移元素的位移量;若不是,则将 A->data[i]向前移动 n 位。n 用来记录当前已删除 元素的个数。
void delete(Seqlist *A,int x,int y)

数据结构名章节习题及答案

数据结构名章节习题及答案

p=p->next; } q=p; while (q!=NULL && q->data<max) q=q->next; r->next=q; r=p->next; while (r!=q) } } 3. 解:void dels(ListNode *head) { ListNode *p=head->next , *q, *pre, *r; while (p!=NULL) { q=p->next; pre=p; while (q!=NULL) { if (p->data==q->data) { r=q; pre->next=q->next; q=q->next; free®; } else { pre=q; q=q->next; } } p=p->next; } 4. 解 : 当 L 不空时从头开始扫描 L, 每次扫描找出一个最小值的结点*p1 及其前趋结点*pre1, 输出*p1 之值,再从表中删除。算法如下: void dels(ListNode *L) { ListNode *p, *pre, *pre1, *p1; while (L->next!=NULL) { pre=pre1=L; p=p1=L->next; while (p!=NULL) { if (p->data<p1->data) pre1=pre; p1=p; } pre=p; p=p->next; } cout <<p1->data<<end1; pre1->next=p1->next; free(p1); { { free(p); p=r; r=r->next;
解:由于是有序表,所以相同值域的结都是相信的。同 p 扫描递增单链表,若*p 结点的 值域等于其后结点的值域,删除后者。

数据结构试卷B

数据结构试卷B

试卷编号: (B )卷数据结构 课程 课程类别:必 开卷(范围)( A4纸一张 ):考生注意事项:1、本试卷共 页,总分 分,考试时间 分钟。

2一、 选择题(每题 2 分,共30分)1. 假设某算法语句总的执行次数为T(n)=5n 5+n³+n²,那么该算法的时间复杂性量级为__B _____。

A) O(2) B) O(n 5) C) O(n 4) D) O(1)2. 若长度为n 的线性表采用顺序存储结构,删除它的第i 数据元素,需要先依次向前移动___A____个数据元素。

( )A) n-i B) n+i C) n-i-1 D) n-i+13. 在一个采用顺序存储方式的线性表中,若表的第一个元素的存储地址是100,每一个元素的长度为2,则第5个元素的地址是 B A) 110 B) 108 C) 100 D) 1204. 从逻辑结构上可以把数据结构分为 C 两大类。

A .动态结构、静态结构B .顺序结构、链式结构C .线性结构、非线性结构D .初等结构、构造型结构 5. 对线性表,在下列哪种情况下应当采用链表表示? BA )经常需要随机地存取元素B )经常需要进行插入和删除操作C )表中元素需要占据一片连续的存储空间D )表中元素的个数不变 6. 带头结点的单链表为空的判断条件是 B 。

A) head==NULL B) head->next==NULL C) head->next==head D) head!=NULL 7. 以下哪一个术语与数据的具体存储结构无关? A A)栈 B)三元组表 C)线索二叉树 D)双向链表 8. 栈的插入和删除操作在( A )进行。

A 栈顶B 栈底C 任意位置D 指定位置9. 某堆栈的输入序列为a,b,c,d,下面的四个序列中,____C ______不可能是它承诺:我将严格遵守考场纪律,知道考试违纪、作弊的严重性,还知道请他人代考或代他人考者将被开除学籍和因作弊受到记过及以上处分将不授予学士学位,愿承担由此引起的一切后果。

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