链表习题高考真题
C程序设计(链表)习题与答案
一、单选题
1、链表不具有的特点是()。
A.不必事先估计存储空间
B.插入、删除不需要移动元素
C.可随机访问任一元素
D.所需空间与线性表长度成正比
正确答案:C
2、链接存储的存储结构所占存储空间()。
A.分两部分,一部分存放结点值,另一部分存放结点所占单元数
B.只有一部分,存放结点值
C.分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针
D.只有一部分,存储表示结点间关系的指针
正确答案:C
3、链表是一种采用()存储结构存储的线性表。
A.网状
B.星式
C.链式
D.顺序
正确答案:C
4、有以下结构体说明和变量的定义,且指针p指向变量a,指针q指向变量b,则不能把结点b连接到结点a之后的语句是()。
struct node {
char data;
struct node *next;
} a,b,*p=&a,*q=&b;
A.(*p).next=q;
B.p.next=&b;
C.a.next=q;
D.p->next=&b;
正确答案:B
5、下面程序执行后的输出结果是()。
#include <stdio.h>
#include <stdlib.h>
struct NODE {
int num; struct NODE *next;
};
int main()
{ struct NODE *p,*q,*r;
p=(struct NODE*)malloc(sizeof(struct NODE));
q=(struct NODE*)malloc(sizeof(struct NODE));
r=(struct NODE*)malloc(sizeof(struct NODE));
数据结构考试复习题及答案 (17)
1. 什么是链表?链表有哪些优点和缺点?
答案:链表是一种数据结构,其中每个元素包含数据和指向下一个元素的指针。链表的优点是可以动态分配内存,缺点是插入和删除操作需要遍历链表。
2. 什么是二叉树?二叉树有哪些基本操作?
答案:二叉树是一种树形数据结构,其中每个节点最多有两个子节点,通常称为左子节点和右子节点。二叉树的基本操作包括插入、删除、搜索和遍历。
3. 什么是堆?堆有哪些性质?
答案:堆是一种完全二叉树,通常用于实现优先队列。堆具有上三角性质,即每个节点的值都大于或等于其子节点的值。
4. 什么是哈希表?哈希表有哪些优点和缺点?
答案:哈希表是一种基于哈希函数的数据结构,用于快速查找和插入元素。哈希表的优点是查找和插入时间复杂度为O(1),缺点是哈希冲突可能导致性能问题。
5. 请解释二叉搜索树、平衡二叉树和B树之间的区别。
答案:二叉搜索树是一种二叉树,其中每个节点的左子树上的所有值都小于该节点的值,右子树上的所有值都大于该节点的值。平衡二叉树是一种特殊的二叉搜索树,它通过调整节点的高度来保持平衡。B树是一种多路搜索树,通常用于磁盘存储系统,具有更复杂的结构和查询算法。
6. 解释二叉树的层次遍历、深度优先遍历和广度优先遍历的区
别。
答案:层次遍历是按照树的层次从上到下、从左到右进行遍历。深度优先遍历包括先序遍历、中序遍历和后序遍历,它们按照节点的值顺序进行遍历。广度优先遍历也称为层次遍历或队列遍历,它使用队列来逐层访问节点。
7. 如何在数组中实现一个快速排序算法?
答案:快速排序算法使用分治思想,将数组分成两个子数组,一个包含小于中间值的元素,另一个包含大于或等于中间值的元素。然后将这两个子数组递归地进行快速排序。在数组中实现快速排序需要使用额外的空间来存储临时变量和分区索引。
第08章指针和链表真题
历年真题(指针)
一、2003年1月
10.以下定义语句中,错误的是
(A ) int a{}={1,2}; (B ) char *a[3];
(C ) char s[10]=”text ”; (D ) int n=5,a[n];
14.下列语句执行后的结果是 。
y=5;p=&y;x=*p++;
(A )x=5,y=5 (B )x=5,y=6
(C )x=6,y=5 (D )x=6,y=6
15. 执行下面的语句后,表达式*(p[0]+1)+**(q+2)的值为 。
int a[]={5,4,3,2,1};*p[]={a+3,a+2,a+1,a};**q=p;
(A )8 (B )7 (C )6 (D )5
16. 经过下面的语句
int I,a[10],*p;
定义后,下列语句中合法的是 。
(A )p=100; (B )p=a[5];
(C )p=a+2; (D )p=&(i+2);
29. 有如下程序
main()
{ char ch[2][5]={“6937”, “8254”},*p[2];
int i,j,s=0;
for(i=0;i<2;i++) p[i]=ch[i];
for(i=0;i<2;i++)
for(j=0;p[i][j]>‟0‟;j+=2)
s=10*s+p[i][j]-…0‟;
printf(“%d\n ”,s);
}
该程序的输出结果是 。
(A )69825 (B )63825 (C )6385 (D )693825
30. 若建立如下图所示的单项链表结构
date next
head
S
在该链表结构中,指针p ,s 分别指向图中所示节点,则不能将s 所指的节点插入链表末尾仍构成单向链表的语句组是 。
第2章习题(带答案)
第2章习题(带答案)
1.链表不具有的特点是
A.可随机访问任一个元素B.插入删除不需要移动元素C.不必事先估
计存储空间D.所需空间与线性表长度成正比
2.在一个具有n个结点的单链表中查找值为某的某结点,若查找成功,则平均
比较个结点。
A.nB.n/2C.(n-1)/2D.(n+1)/2
3.在单链表中P所指结点之后插入一个元素某的主要操作语句序列是
=(node某)malloc(izeof(node));、->data=某;、->ne某t=p->ne某t、
p->ne某t=。4.在单链表中查找第i个元素所花的时间与i成正比。(√)5.在带头结点的双循环链表中,任一结点的前驱指针均不为空。(√)6.用链表表示线性表的优点是()。A.便于随机存取C.便于插入与
删除
B.花费的存储空间比顺序表少
D.数据元素的物理顺序与逻辑顺序相同
7.在双向链表中删除P所指结点的主要操作语句序列是p->prior-
>ne某t=p->ne某t;、p->ne某t->prior=p->prior;、free(p);8.下述哪
一条是顺序存储结构的优点?()
A.存储密度大B.插入运算方便C.删除运算方便D.可方便地用于
各种逻辑结构的存储表示
9.若某表最常用的操作是在最后一个结点之后插入一个结点或删除
最后一个结点。则采用()存储方式最节省运算时间。
A.单链表B.双链表C.单循环链表D.带头结点的双循环链表10.
对任何数据结构链式存储结构一定优于顺序存储结构。(某)
11.对于双向链表,在两个结点之间插入一个新结点需修改的指针共4个,单链表为____2___个。
链表c语言经典例题
链表c语言经典例题
链表是计算机科学中的经典数据结构之一,常用于存储和操作动态数据。以下是一些常见的链表例题,可以帮助理解链表的基本操作和应用。
1. 链表的创建:
- 创建一个空链表。
- 创建一个包含指定节点值的链表。
2. 链表的插入操作:
- 在链表的头部插入一个节点。
- 在链表的尾部插入一个节点。
- 在指定位置插入一个节点。
3. 链表的删除操作:
- 删除链表的头节点。
- 删除链表的尾节点。
- 删除指定数值的节点。
4. 链表的查找操作:
- 查找链表中指定数值的节点。
- 查找链表的中间节点。
5. 链表的逆序操作:
- 反转整个链表。
- 反转链表的前 N 个节点。
- 反转链表的一部分区间内的节点。
6. 链表的合并操作:
- 合并两个有序链表,使其有序。
- 合并 K 个有序链表,使其有序。
7. 链表的环检测:
- 判断链表中是否存在环,若存在,则返回环的起始节点。
8. 链表的拆分操作:
- 将一个链表按照奇偶位置拆分成两个链表。
以上是一些链表的经典例题,通过解答这些例题,可以加深对链表结构和基本操作的理解。在编写对应的 C 语言代码时,需要注意链表节点的定义、指针的使用以及内存的动态分配和释放等问题。
单向链表的选择题
关于单向链表的选择题:
1.单向链表中,删除一个节点需要的时间复杂度是_______。
A. O(1)
B. O(n)
C. O(log n)
D. O(n^2)
2.在单向链表中,插入一个节点需要的时间复杂度是_______。
A. O(1)
B. O(n)
C. O(log n)
D. O(n^2)
3.单向链表相比于数组,其优点是_______。
A. 查找速度快
B. 插入和删除操作方便
C. 存储空间少
D. 可以动态扩展
4.在单向链表中,若要查找某个节点,则时间复杂度为_______。
A. O(1)
B. O(n)
C. O(log n)
D. O(n^2)
5.单向链表的一个缺点是_______。
A. 查找速度慢
B. 插入和删除操作不方便
C. 存储空间大
D. 不能动态扩展
6.在单向链表中,要插入一个新的节点,需要修改哪几个节点的
指针?
A. 新节点本身
B. 新节点的父节点
C. 新节点的子节点
D. 新节点的兄弟节点
7.在单向链表中,删除一个节点后,如何处理被删除节点的后继
节点的指针?
A. 置为空
B. 指向被删除节点的父节点
C. 指向被删除节点的下一个节点
D. 保持不变
8.单向链表与双向链表的主要区别是什么?
A. 单向链表的节点只有一个指针,而双向链表的节点有两个指
针
B. 单向链表的节点只能沿一个方向遍历,而双向链表的节点可
以沿两个方向遍历
C. 单向链表的节点比双向链表的节点更小
D. 单向链表的节点没有颜色,而双向链表的节点有颜色
9.在单向链表中,如何找到中间的节点?
A. 需要遍历整个链表
B. 无法找到中间的节点,只能找到第n个节点
c++数据结构链表的选择题
c++数据结构链表的选择题
摘要:
1.链表的定义与特点
2.链表的种类
3.链表的优缺点
4.选择题解答
正文:
一、链表的定义与特点
链表是一种数据结构,它是由一系列节点组成,每个节点包含两个部分:数据部分和指针部分。数据部分用于存储数据,指针部分用于指向下一个节点。链表的第一个节点称为头节点,最后一个节点称为尾节点。链表的特点是每个节点之间通过指针进行连接,而且每个节点都可以随时删除或插入。
二、链表的种类
链表主要有两种类型:单链表和双链表。单链表只有一个指针域,它只能指向下一个节点;双链表有两个指针域,一个指向前一个节点,一个指向后一个节点。双链表在插入和删除操作时比单链表更加方便。
三、链表的优缺点
链表的优点是插入和删除操作比较灵活,不需要移动元素,时间复杂度为O(1)。链表的缺点是存储空间利用率较低,每个节点需要额外的指针空间。另外,链表的访问速度较慢,因为需要遍历整个链表才能找到目标节点。
历年链表考题与答案
历年链表考题及答案
[2005秋II.14]设已建立了两条单向链表,这两链表中的数据已按从小到大的次序排好,指针h1和h2分别指向这两条链表的首结点。链表上结点的数据结构如下:
structnode{
intdata;
node*next;
};
以下函数node*Merge(node*h1,node*h2)的功能是将h1和h2指向的两条链表上的结
点合并为一条链表,使得合并后的新链表上的数据仍然按升序排列,并返回新链表的首结点指针。
算法提示:首先,使newHead和q都指向首结点数据较小链表的首结点,p指向另一链表首结点。其次,合并p和q所指向的两条链表。在q不是指向链尾结点的情况下,如果q 的下一个结点数据小于p指向的结点数据,则q指向下一个结点;否则使p1指向q的下一
个结点,将p指向的链表接到q所指向的结点之后,使q指向p所指向的结点,使p指向
p1所指向的链表。直到p和q所指向的两条链表合并结束为止。注意,在合并链表的过程中,始终只有两条链表。
[函数](4分)
node*Merge(node*h1,node*h2)
{node*newHead,*p,*p1;
//使newHead和q指向首结点数据较小链表的首结点,p指向另一链表首结点if((27)){newHead=h1;p=h2;}//h1->data<h2->data
else{newHead=h2;p=h1;}
node*q=newHead;
//合并两条链表
while(q->next)
{if(q->next->data<p->data)
C语言链表题目及答案
下面哪种选项描述了链表的特点?
A) 可以随机访问元素
B) 拥有固定大小的内存空间
C) 元素之间通过指针连接
D) 可以自动调整大小
答案: C
在链表中,头节点的作用是什么?
A) 存储链表的长度
B) 存储链表的最后一个节点
C) 存储链表的第一个节点
D) 存储链表的中间节点
答案: C
下面哪种选项描述了双向链表的特点?
A) 每个节点只有一个指针指向下一个节点
B) 每个节点只有一个指针指向上一个节点
C) 每个节点同时拥有指向前一个节点和后一个节点的指针
D) 只能从链表的一端进行操作
答案: C
在链表中,删除一个节点的操作涉及修改哪些指针?
A) 只需要修改被删除节点的前一个节点的指针
B) 只需要修改被删除节点的后一个节点的指针
C) 需要修改被删除节点的前一个节点和后一个节点的指针
D) 不需要修改任何指针
答案: C
在链表的尾部添加一个新节点的操作复杂度是多少?
A) O(1)
B) O(n)
C) O(log n)
D) O(n^2)
答案: A
如何遍历链表的所有节点?
A) 使用for循环
B) 使用while循环
C) 使用递归函数
D) 使用if语句
答案: B
在链表中,如何找到特定值的节点?
A) 使用线性搜索
B) 使用二分搜索
C) 使用递归搜索
D) 使用栈搜索
答案: A
链表和数组相比,哪个更适合频繁插入和删除操作?
A) 链表
B) 数组
C) 二叉树
D) 堆栈
答案: A
在链表中,如何在指定位置插入一个新节点?
A) 修改前一个节点的指针
B) 修改后一个节点的指针
C) 修改当前节点的指针
D) 不需要修改任何指针
答案: A
单链表、双链表、循环链表和静态链表的习题
单链表、双链表、循环链表和静态链表的习题
一、单项选择题
1.关于线性表的顺序存储结构和链式存储结构的描述中,正确的是()。
Ⅰ.线性表的顺序存储结构优于其链式存储结构
Ⅱ.链式存储结构比顺序存储结构能更方便地表示各种逻辑结构
Ⅲ.如频繁使用插入和删除结点操作,顺序存储结构更优于链式存储结构
Ⅳ.顺序存储结构和链式存储结构都可以进行顺序存取
A. Ⅰ、Ⅱ、Ⅲ
B. Ⅱ、Ⅳ
C. Ⅱ、Ⅲ
D. Ⅲ、Ⅳ
2.对于一个线性表既要求能够进行较快速地插入和删除,又要求存储结构能反映数据之间的逻辑关系,则应该用()。
A.顺序存储方式
B.链式存储方式
C.散列存储方式
D.以上均可以
3.对于顺序存储的线性表,其算法的时间复杂度为O(1)的运算应该是()。
A.将n个元素从小到大排序
B.删除第i个元素(1<i<n)
C.改变第i个元素的值(1<=i<=n)
D.在第i个元素后插入一个新元素(1<=i<=n)
4.下列关于线性表说法正确的是()。
Ⅰ.顺序存储方式只能用于存储线性结构
Ⅱ.取线性表的第i个元素的时间同i的大小有关
Ⅲ.静态链表需要分配较大的连续空间,插入和删除不需要移动元素
Ⅳ.在一个长度为n的有序单链表中插入一个新结点并仍保持有序的时间复杂度为O(n) Ⅴ.若用单链表来表示队列,则应该选用带尾指针的循环链表
A. Ⅰ、Ⅱ
B.Ⅰ、Ⅲ、Ⅳ、Ⅴ
C. Ⅳ、Ⅴ
D. Ⅲ、Ⅳ、Ⅴ
5.设线性表中有2n个元素,()在单链表上实现要比在顺序表上实现效率更高。
A.删除所有值为x的元素
B.在最后一个元素的后面插入一个新元素
历年链表考题与答案
历年链表考题及答案
[2005秋II.14]设已建立了两条单向链表,这两链表中的数据已按从小到大的次序排好,指针h1和h2分别指向这两条链表的首结点。链表上结点的数据结构如下:
structnode{
intdata;
node*next;
};
以下函数node*Merge(node*h1,node*h2)的功能是将h1和h2指向的两条链表上的结
点合并为一条链表,使得合并后的新链表上的数据仍然按升序排列,并返回新链表的首结点指针。
算法提示:首先,使newHead和q都指向首结点数据较小链表的首结点,p指向另一链表首结点。其次,合并p和q所指向的两条链表。在q不是指向链尾结点的情况下,如果q 的下一个结点数据小于p指向的结点数据,则q指向下一个结点;否则使p1指向q的下一
个结点,将p指向的链表接到q所指向的结点之后,使q指向p所指向的结点,使p指向
p1所指向的链表。直到p和q所指向的两条链表合并结束为止。注意,在合并链表的过程中,始终只有两条链表。
[函数](4分)
node*Merge(node*h1,node*h2)
{node*newHead,*p,*p1;
//使newHead和q指向首结点数据较小链表的首结点,p指向另一链表首结点if((27)){newHead=h1;p=h2;}//h1->datadata
else{newHead=h2;p=h1;}
node*q=newHead;
//合并两条链表
while(q->next)
{if(q->next->datadata)
(28);//q=q->next
习题3(链表)
习题3(链表)
一、选择题
(1)链接存储的存储结构所占存储空间( A )。
A)分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针
B)只有一部分,存放结点值C)只有一部分,存储表示结点间关系的指针
D)分两部分,一部分存放结点值,另一部分存放结点所占单元数
(2)线性表若采用链式存储结构时,要求内存中可用存储单元的地址( D )。
A)必须是连续的B)部分地址必须是连续的C)一定是不连续的D)连续或不连续都可以(3)线性表L在( B )情况下适用于使用链式结构实现。
A)需经常修改结点值B)需不断删除插入C)含有大量的结点D)结点结构复杂(4)单链表的存储密度( C )。
A)大于1 B)等于1 C)小于1 D)不能确定
(5)若指定有n个元素的向量,则建立一个有序单链表的时间复杂性的量级是( C )。
A)O(1) B)O(n) C)O(n2) D)O(nlog2n)
(6)在单链表中,要将s所指结点插入到p所指结点之后,其语句应为( D )。
A)s->next=p+1; p->next=s; B)(*p).next=s; (*s).next=(*p).next;
C)s->next=p->next; p->next=s->next; D)s->next=p->next; p->next=s;
(7)在双向链表存储结构中,删除p所指的结点时须修改指针( A )。
A)p->next->prior=p->prior; p->prior->next=p->next;
顺序表、链表试题库
第三章顺序表
一、填空
1.若线性表最常用的操作是存取第i 个元素及其前驱元素的值,则采用()存储
结构最节省运算时间。
2.顺序存储结构的线性表中所有元素的地址()连续。
3.顺序存储结构的线性表其物理结构与逻辑结构是()的。
4.在具有n个元素的顺序存储结构的线性表任意一个位置中插入一个元素,在等概率条件下,平均需要移动()个元素。
5.在具有n个元素的顺序存储结构的线性表任意一个位置中删除一个元素,在等概率条件下,平均需要移动()个元素。
6.在具有n个元素的顺序存储结构的线性表中查找某个元素,平均需要比较()次。7.当线性表的元素基本稳定,且很少进行插入和删除操作,但要求以最快的速度存取线性表中第i个元素时,应采用( )存储结构。
8.顺序存储结构的线性表中,插入或删除某个元素时,元素移动的次数与其位置()关。(填有或无)。
9.顺序存储结构的线性表中,访问第i个元素与其位置()关。(填有或无)。
10.在具有n个元素的顺序存储结构的线性表中要访问第i个元素的时间复杂度是()。11.在顺序表L中的i个位置插入某个元素x,正常插入时,i位置以及i位置以后的元素需要后移,首先后移的是()个元素。
12.要删除顺序表L中的i位置的元素x,正常删除时,i位置以后的元素需要前移,首先前移的是()元素。
13.若顺序表中的元素是从1位置开始存放的,要在具有n个元素的顺序表中插入一个元素,合法的插入位置是()。
14.若顺序表中的元素是从1位置开始存放的,要删除具有n个元素的顺序表中某个元素,合法的删除位置是()。
链表练习题及答案
链表练习题及答案
1、已知L是带表头的单链表,其P结点既不是首元结点,也不是尾元结点,
a.删除p结点的直接后继的语句是11,3,14
b.删除p结点的直接前驱的语句是10,12,8,11,3,14
c.删除p结点的语句序列是10,7,3,14
d.删除首元结点的语句序列是12,10,13,14
e.删除尾元结点的语句序列是9,11,3,14
(1)p=p->next;(2) p->next=p;
(3)p->next=p->next->next;
(4)p=p->next->next;(5)while(p)p=p->next;
(6)whlie(Q->next){p=Q;Q=Q->next;}
(7)while(p->next!=Q)p=p->next;
(8)while(p->next->next!=Q)p=p->next;
(9)while(p->next->next)p=p->next;
(10)Q=p;(11)Q=p->next;(12)p=L;
(13)L=L->next;(14)free(Q);
2、已知L是带表头的单链表,其P结点既不是首元结点,也不是尾元结点,
a.在p结点后插入s结点的语句序列是4,1
b.在p结点前插入s结点的语句序列是7,11,8,4,1
c.在表首插入s结点的语句序列是5,12
d.在表尾插入s结点的语句序列是
7,9,4,1或11,9,1,6
1.p-> next =s;
数据结构——链表PTA习题
数据结构——链表PTA习题
文章目录
•
•
•
o
o
▪
▪
▪
o
o
▪
▪
▪
o
o
▪
▪
▪
o
单选题
题
号
题目答案
1 结点的单链表中,实现下列哪个操作,其算法的时
间复杂度是O(N)?
遍历链表和求链表的第
i个结点
2 对于一个具有N个结点的单链表,在给定值为x的
结点后插入一个新结点的时间复杂度为
O(N)
3 线性表若采用链式存储结构时,要求内存中可用存
储单元的地址
连续或不连续都可以
题
号
题目答案
4 某线性表中最常用的操作是在最后一个元素之后插
入一个元素和删除第一个元素,则采用什么存储方
式最节省运算时间?
仅有尾指针的单循环链
表
5 若某表最常用的操作是在最后一个结点之后插入一
个结点或删除最后一个结点。则采用哪种存储方式
最节省运算时间?
带头结点的双循环链表
6 线性表L在什么情况下适用于使用链式结构实现?需不断对L进行删除插入
7 将线性表La和Lb头尾连接,要求时间复杂度为
O(1),且占用辅助空间尽量小。应该使用哪种结
构?
带尾指针的单循环链表
8 链表不具有的特点是:方便随机访问任一元素
9 在单链表中,若p所指的结点不是最后结点,在p
之后插入s所指结点,则执行
s->next=p->next;
p->next=s;
10 将两个结点数都为N且都从小到大有序的单向链表合并成一个从小到大有序的单向链表,那么可能的最少比较次数是:
N
函数题
6-1 链式表的按序号查找
本题要求实现一个函数,找到并返回链式表的第K个元素。
L是给定单链表,函数FindKth要返回链式表的第K个元素。如果该元素不存在,则返回ERROR。
输入样例:
链表习题——精选推荐
一选择题
1.下述哪一条是顺序存储结构的优点?(a )
A.存储密度大B.插入运算方便C.删除运算方便D.可方便地用于各种逻辑结构的存储表示
2.下面关于线性表的叙述中,错误的是哪一个?(b )
A.线性表采用顺序存储,必须占用一片连续的存储单元。
B.线性表采用顺序存储,便于进行插入和删除操作。
C.线性表采用链接存储,不必占用一片连续的存储单元。
D.线性表采用链接存储,便于插入和删除操作。
3.线性表是具有n个(c)的有限序列(n>0)。
A.表元素B.字符C.数据元素D.数据项E.信息项
4.若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用(a )存储方式最节省时间。
A.顺序表B.双链表C.带头结点的双循环链表D.单循环链表5.某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用(d )存储方式最节省运算时间。
A.单链表B.仅有头指针的单循环链表C.双链表D.仅有尾指针的单循环链表
6.设一个链表最常用的操作是在末尾插入结点和删除尾结点,则选用( d )最节省时间。
A. 单链表
B.单循环链表
C. 带尾指针的单循环链表
D.带头结点的双循环链表
//双循环链表处理所有问题要比其他链表更方便
7. 静态链表中指针表示的是(c ).
A.内存地址B.数组下标C.下一元素地址D.左、右孩子地址
8. 链表不具有的特点是(b )
A.插入、删除不需要移动元素B.可随机访问任一元素
C.不必事先估计存储空间D.所需空间与线性长度成正比
9. 下面的叙述不正确的是(b,c )
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(2)下列程序的功能是实现向head指向的链表中插入新结点s,如图17所示,使该链表按结点的id值保持升序排列。
图17
#include
#include
typedef struct Node{
int id;
char *name;
struct Node *next;
}Node;
void Innode(Node *head,int id,char *str) {
int j=0;
Node *p,*q,*s;
p=head;
while( ④) {
q=p;
p=p->next;
}
s=(Node*)malloc(sizeof(Node));
s->id=id;
s->name=str;
⑤
⑥
}
main()
{
/*省略创建链表head的代码*/ Innode(head,3,”Jone”);
}
36.Merge函数用于将两个升序的链表head1和head2合并成一个链表,并保持合并后链表依然升序。排序的依据为结构体类型Node中的data成员,合并中不得删除节点。下面给出Merge函数的主体框架,在空出的五个位置补充该主体框架缺失的代码段。注意:不能定义新的变量,可不用已定义的某些变量。
typedef struct Node
{
int data;
struct Node *next;
}Node;
Node *Merge(Node *head1,Node *head2)
{
if ( head1==NULL)
return head2;
if(head2==NULL)
return headl;
Node *head=NULL;//head指针用于指向合并后链表的头结点
Node *pl=NULL;
Node *p2=NULL;
if(headl->data
head=headl;
______①______
p2=head2;
}else{
head=head2;
______②______
pl=headl;
}
}
Node *pcurrent=head;
while(p1!=NULL&&p2!=NULL) {
if(pl->data<=p2->data){
pcurrent->next=p1;
______③______
p1=pl->next;
}else{
pcurrent->next=p2;
______④______
p2=p2->next;
}
}
if(pl!=NULL)
______⑤______
if(p2!=NULL)
pcurrent->next=p2;return head;
}