将递增有序的单链表A和B合并成递减有序的单链表C
算法设计题打印部分
算法设计题打印部分
假设有两个按元素值递增次序排列的线性表均以单链表形
式存储。请编写算法将这两个单链表归并为一个按元素值递减次序排列的单链表并要求利用原来两个单链表的结点存
放归并后的单链表。【北京大学1998 三、1 5分】类似本题的另外叙述有1设有两个无头结点的单链表头指针分
别为hahb链中有数据域data链域next两链表的数据都按递增序存放现要求将hb表归到ha表中且归并后ha仍递增序归并中ha表中已有的数据若hb中也有则hb中的数据不归并到ha中hb的链表在算法中不允许破坏。【南京理工大学1997 四、315分】PROCEDURE mergehahb 2已知头指针分别为la和lb 的带头结点的单链表中结点按元素值非递减有序排列。写出将la 和lb两链表归并成一个结点按元素值非递减有序排列的单链表其头指针为lc并计算算法的时间复杂度。【燕山大学1998 五20分】 2. 图编者略中带头结点且头指针为ha和hb的两线性表A和B 分别表示两个集合。两表中的元素皆为递增有序。请写一算法求A和B的并集AUB。要求该并集中的元素仍保持递增有序。且要利用A和B的原有结点空间。【北京邮电大学1992 二15分】类似本题的另外叙述有1 已知递增有序的两个单链表AB分别存储了一个集合。设计算法实现求两个集合的并集的运算A:A∪B【合肥工业大学1999 五、18分】2已知两个链表A和B分别表示两个集合其元素递增排列。编一函数求A与
B的交集并存放于A链表中。【南京航空航天大学2001 六10分】3设有两个从小到大排序的带头结点的有序链表。试编写求这两个链表交运算的算法即L1∩L2。要求结果链表仍是从小到大排序但无重复元素。【南京航空航天大学1996 十一10分】4己知两个线性表A B均以带头结点的单链表作存储结构且表中元素按值递增有序排列。设计算法求出A 与B的交集C要求C另开辟存储空间要求C同样以元素值的递增序的单链表形式存贮。【西北大学2000 五8分】5已知递增有序的单链表AB和C分别存储了一个集合设计算法实现AA∪B∩C并使求解结构A 2 仍保持递增。要求算法的时间复杂度为OABC。其中A为集合A的元素个数。【合肥工业大学2000 五、18分】3. 知L1、L2分别为两循环单链表的头结点指针mn分别为L1、L2表中数据结点个数。要求设计一算法用最快速度将两表合并成一个带头结点的
数据结构考试题1
要求:所有的题目的解答均写在答题纸上,需写清楚题目的序号.每张答题纸都要写上姓名和学号.
一、单项选择题(每小题1。5分,共计30分)
1。数据结构是指。
A。一种数据类型
B. 数据的存储结构
C. 一组性质相同的数据元素的集合
D. 相互之间存在一种或多种特定关系的数据元素的集合
2. 以下算法的时间复杂度为。
void fun(int n)
{ int i=1;
while (i<=n)
i++;
}
A. O(n)
B. O(n)
C. O(nlog2n)D。O(log2n)
3. 在一个长度为n的有序顺序表中删除元素值为x的元素时,在查找元素x时采用二分查找,此时的时间复杂度为。
A。O(n) B. O(nlog2n)
C。O(n2) D. O(n)
4. 在一个带头结点的循环单链表L中,删除元素值为x的结点,算法的时间复杂度为.
A. O(n)B。O(n)
C. O(nlog2n)D。O(n2)
5。若一个栈采用数组s[0。.n-1]存放其元素,初始时栈顶指针为n,则以下元素x进栈的正确操作是。
A。top++;s[top]=x; B.s[top]=x;top++;
C.top-—;s[top]=x;B。s[top]=x;top—-;
6。中缀表达式“2*(3+4)—1”的后缀表达式是,其中#表示一个数值的结束.
A. 2#3#4#1#*+—
B. 2#3#4#+*1#—
C. 2#3#4#*+1#—
D. —+*2#3#4#1#
7。设环形队列中数组的下标为0~N-1,其队头、队尾指针分别为front和rear(front 指向队列中队头元素的前一个位置,rear指向队尾元素的位置),则其元素个数为。
DS02线性表习题参考解答
第2章线性表习题参考解答
一、简答题
1.试描述头指针、头结点、开始结点的区别、并说明头指针和头结点的作用。
【答】头指针:是指向链表中的第一个结点的指针。
头结点:在开始结点之前附加上的一个结点。
开始结点:链表的第一个结点。
头指针是一个指向地址的变量,用于表示一个链表的开始。引入头结点可以更加方便的进行链表是否为空的判断,同时方便了插入和删除结点。开始结点用于存储链表的第一个数据元素。
2.何时选用顺序表、何时选用链表作为线性表的存储结构为宜?
【答】顺序表中查找元素、获取表长非常容易,但是,要插入或者删除一个元素却需要移动大量的元素;相反,链表中却是方便插入或者删除元素,在查找元素的是,需要进行遍历。因此,当所涉及的问题常常进行查找等操作,而插入、删除相对较少的是,适合采用顺序表;当常常需要插入、删除的时候,适合采用链表。
3.为什么在单循环链表中设置尾指针比设置头指针更好?
【答】在单循环链表中,设置尾指针,可以更方便的判断链表是否为空。
4.在单链表、双链表和单循环链表中,若仅知道指针p指向某结点,不知道头指针,能否将结点*p从相应的链表中删去?
【答】本题分三种情况讨论:
1、单链表:当知道指针p指向某结点时,能够根据该指针找到其直接后继,但是不知道头指针,因此不能找到该结点的直接前趋,因此,无法删除该结点。
2、双链表:根据指针p可以找到该结点的直接前趋和直接后继,因此,能够删除该结点。
3、单循环链表:和双链表类似,根据指针p也可以找到该结点的直接前趋和直接后继,因此,也可以删除该结点。
5.下述算法的功能是什么?
DS第二章_课后习题答案
第二章线性表
2.1 填空题
(1)一半插入或删除的位置
(2)静态动态
(3)一定不一定
(4)头指针头结点的next 前一个元素的next
2.2 选择题
(1)A (2) DA GKHDA EL IAF IFA(IDA)
(3)D (4)D (5) D
2.3
头指针:在带头结点的链表中,头指针存储头结点的地址;在不带头结点的链表中,头指针存放第一个元素结点的地址;
头结点:为了操作方便,在第一个元素结点前申请一个结点,其指针域存放第一个元素结点的地址,数据域可以什么都不放;
首元素结点:第一个元素的结点。
2.4已知顺序表L递增有序,写一算法,将X插入到线性表的适当位置上,以保持线性表的有序性。
void InserList(SeqList *L,ElemType x)
{
int i=L->last;
if(L->last>=MAXSIZE-1) return FALSE; //顺序表已满
while(i>=0 && L->elem[i]>x)
{
L->elem[i+1]=L->elem[i];
i--;
}
L->elem[i+1]=x;
L->last++;
}
2.5 删除顺序表中从i开始的k个元素
int DelList(SeqList *L,int i,int k)
{
int j,l;
if(i<=0||i>L->last) {printf("The Initial Position is Error!"); return 0;}
if(k<=0) return 1; /*No Need to Delete*/
if(i+k-2>=L->last) L->last=L->last-k; /*modify the length*/
数据结构课后习题答案详解(C语言版_严蔚敏) 2
数据结构习题集答案(C语言版严蔚敏)
第2章线性表
2.1 描述以下三个概念的区别:头指针,头结点,首元结点(第一个元素结点)。
解:头指针是指向链表中第一个结点的指针。首元结点是指链表中存储第一个数据元素的结点。头结点是在首元结点之前附设的一个结点,该结点不存储数据元素,其指针域指向首元结点,其作用主要是为了方便对链表的操作。它可以对空表、非空表以及首元结点的操作进行统一处理。
2.2 填空题。
解:(1) 在顺序表中插入或删除一个元素,需要平均移动表中一半元素,具体移动的元素个数与元素在表中的位置有关。
(2) 顺序表中逻辑上相邻的元素的物理位置必定紧邻。单链表中逻辑上相邻的元素的物理位置不一定紧邻。
(3) 在单链表中,除了首元结点外,任一结点的存储位置由其前驱结点的链域的值指示。
(4) 在单链表中设置头结点的作用是插入和删除首元结点时不用进行特殊处理。
2.3 在什么情况下用顺序表比链表好?
解:当线性表的数据元素在物理位置上是连续存储的时候,用顺序表比用链表好,其特点是可以进行随机存取。
2.4 对以下单链表分别执行下列各程序段,并画出结果示意图。
解:
2.5 画出执行下列各行语句后各指针及链表的示意图。
L=(LinkList)malloc(sizeof(LNode)); P=L;
for(i=1;i<=4;i++){
P->next=(LinkList)malloc(sizeof(LNode));
P=P->next; P->data=i*2-1;
}
P->next=NULL;
数据结构考试题9
要求:所有的题目的解答均写在答题纸上,需写清楚题目的序号。每张答题纸都要写上姓名和学号。
一、单项选择题(每小题2分,共20小题,共计40分)
1、设n是描述问题规模的非负整数,下面程序片段的时间复杂度为()。
x=1;
while (x<=n)
x=5*x;
A. O(log5n)
B.O(n)
C.O(n log5n)
D.O(n5)
2、顺序表和链表相比存储密度较大,这是因为()。
A.顺序表的存储空间是预先分配的
B.顺序表不需要增加指针来表示元素之间的逻辑关系
C.链表中所有节点的地址是连续的
D.顺序表中所有元素的存储地址是不连续的
3、在长度为n(n≥1)的循环双链表L中,在尾节点之后插入一个新节点的时间复杂度为()。
A. O(n2)
B.O(n)
C. O(1)
D.O(n log2n)
4、设栈的输入序列是1、2、3、4,则()不可能是其出栈序列。
A.1,2,4,3
B.2,1,3,4
C.1,4,3,2
D.4,3,1,2
5、当用一个数组data[0..n-1]存放栈中元素时,栈底最好()。
A. 设置在data[0]或data[n-1]处
B.设置在data[n-1]处
C. 设置在data[0]处
D.设置在data数组的任何位置
6、在数据处理过程中常需要保存一些中间数据,如果先保存的数据先处理,则使用()来保存这些数据。
A.线性表
B. 队列
C. 栈
D.单链表
7、在环形队列中,元素的排列顺序()。
A.与队头和队尾指针的取值有关
B.与元素值的大小有关
C.由元素进队的先后顺序确定
D.与存放队中元素的数组大小有关
8、将10阶对称矩阵压缩存储到一维数组A中,则数组A的长度最少为()。
《数据结构—用C语言描述》课后习题答案
数据结构课后习题参考答案
第一章绪论
1.3 (1) O(n)
(2)(2)O(n)
(3)(3)O(n)
(4)(4)O(n1/2)
(5)(5)执行程序段的过程中,x,y值变化如下:
循环次数x y
0(初始)91 100
1 9
2 100
2 9
3 100
………………
9 100 100
10 101 100
11 91 99
12 92 100
………………
20 101 99
21 91 98
………………
30 101 98
31 91 97
到y=0时,要执行10*100次,可记为O(10*y)=O(n)
1.5 2100 , (2/3)n , log2n , n1/2 ,n3/2, (3/2)n , n log2n , 2 n ,n! , n n
第二章线性表(参考答案)
在以下习题解答中,假定使用如下类型定义:
(1)顺序存储结构:
#define MAXSIZE 1024
typedef int ElemType;// 实际上,ElemType可以是任意类型
typedef struct
{ ElemType data[MAXSIZE];
int last; // last表示终端结点在向量中的位置
}sequenlist;
(2)链式存储结构(单链表)
typedef struct node
{ElemType data;
struct node *next;
}linklist;
(3)链式存储结构(双链表)
typedef struct node
{ElemType data;
struct node *prior,*next;
}dlinklist;
数据结构单元2 同步训练及答案
单元2 同步训练及参考答案
同步训练
一、单项选择题
1.线性表是()的有限序列。
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.一个顺序表第一个元素的存储地址是100,每个元素的存储长度为4,则第5个元素的地址是()。
A.110 B.116 C.100 D.120 7.一个长度为n的顺序表中,在第i(1≤i≤n+1)个元素的位置上插入一个新元素时,需要向后移动个元素。
A.n-i B.n-i+1 C.n-i-1 D.i
8.一个长度为n的顺序表中,删除第i(1≤i≤n)个元素时,需要向前移动()个元素。
A.n-i B.n-i+1 C.n-i-1 D.i
9.在一个长度为n的顺序表中插入一个结点需平均移动()个结点。
A.(n+1)/2 B.n/2 C.(n-1)/2 D.n
数据结构模拟试卷和答案
北京语言大学网络教育学院
《数据结构》模拟试卷一
注意:
1.试卷保密,考生不得将试卷带出考场或撕页,否则成绩作废。请监考老师负责监督。
2.请各位考生注意考试纪律,考试作弊全部成绩以零分计算。
3.本试卷满分100分,答题时间为90分钟。
4.本试卷分为试题卷和答题卷,所有答案必须答在答题卷上,答在试题卷上不给分。
一、【单项选择题】(本大题共10小题,每小题2分,共20分)在每小题列出的四个选项中只有一个选项是符合题目要求的,请将正确选项前的字母填在答题卷相应题号处。
1、若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则采用()存储方式最节省时间。
[A] 顺序表[B] 双链表
[C]带头结点的双循环链表[D] 单循环链表
2、队列操作的原则是()。
[A] 只能进行删除[B] 后进先出
[C]只能进行插入[D] 先进先出
3、某二叉树的先序序列和后序序列正好相反,则该二叉树一定是()的二叉树。
[A] 空或只有一个结点[B] 高度等于其结点数
[C]任一结点无左孩子[D] 任一结点无右孩子
4、在下列排序方法中,()方法平均时间复杂度为0(nlogn),最坏情况下时间复杂度为0(n2)。
[A] 插入排序[B] 希尔排序[C] 快速排序[D] 堆排序
5、对二叉树从1开始进行连续编号,要求每个结点的编号大于其左、右孩子的编号,同一个结点的左、右孩子中,其左孩子编号小于右孩子编号。则可采用()次序的遍历实现编号。
[A] 先序[B] 中序
[C]后序[D] 从根开始的层次遍历
6、若用数组S[n]作为两个栈S1和S2的共用存储结构,对任何一个栈,只有当S[n]全满时才不能作入栈操作。为这两个栈分配空间的最佳方案是()。
数据结构期末考试试题及答案
数据结构期末考试真题及答案
期末样卷参考答案
一.是非题〔每题1分共10分〕
1. 线性表的链式存储结构优于顺序存储结构。F
2. 栈和队列也是线性表。如果需要,可对它们中的任一元素进行操作。F
3.字符串是数据对象特定的线性表。T
4.在单链表P指针所指结点之后插入S结点的操作是:P->next= S ; S-> next = P->next; F
5.一个无向图的连通重量是其极大的连通子图。T 6.邻接表可以表示有向图,也可以表示无向图。T 7.假设B是一棵树,B′是对应的二叉树。则B的后根遍历相当于B′的中序遍历。T
8.通常,二叉树的第i层上有2i-1个结点。F
9.对于一棵m阶的B-树,树中每个结点至多有m 个关键字。除根之外的全部非终端结点至少有ém/2ù个关键字。F
10.对于任何待排序序列来说,快速排序均快于起泡排序。F
二.选择题〔每题2分共28分〕
1.在以下排序方法中,〔c 〕方法平均时间复杂度为0(nlogn),最坏情况下时间复杂度为0(n2);〔d 〕方法全部情况下时间复杂度均为0(nlogn)。
a. 插入排序
b. 希尔排序
c. 快速排序
d. 堆排序
2. 在有n个结点的二叉树的二叉链表表示中,空指针数为〔 b 〕。
a.不定
b.n+1
c.n
d.n-1
3. 以下二叉树中,〔a 〕可用于完成符号不等长高效编码。
a.最优二叉树
b.次优查找树
c.二叉平衡树
d.二叉排序树
4. 以下查找方法中,〔a 〕适用于查找有序单链表。
a.顺序查找
b.二分查找
c.分块查找
d.哈希查找
5. 在顺序表查找中,为防止查找过程中每一步都检测整个表是否查找完毕,可采纳〔 a 〕方法。
数据结构题库-程序填空(上海杉达学院期末总复习题)
数据结构题库-程序填空(上海杉达学院期末总复习题)
《数据结构》――程序填空
2018年9月
1.一个带头结点的单链表如下:
head为头指针,每个结点按data字段值递增顺序链接,r指向一个新结点,下面是将r所指的新结点插入链表中的算法,插入后结点仍按data字段值递增顺序链接。
typedef struct node
{ int data;
struct node *link;
} node, *ptr;
void insert (ptr &head, ptr r)
{ pred = head;
q = head->link;
while ( ( q) && (q->data <= r->data))
{ pred = q;
q=q->link;
}
r->link = q;
pre->link = r;
}
2.求单链表的长度
typedef struct lnode {
elemtp data;
struct lnode * next;
} lnode, * linkisttp;
int length (linkisttp L)
{ p = L->next; len = 0;
while (p)
{ len ++;
p = p->next;
}
return len;
}
3.假设head1指向带有头结点的单链表,现将该单链表复制一个。
typedef struct lnode {
elemtp data;
struct lnode * next;
} lnode, * linkisttp;
《数据结构-C语言描述》习题及答案耿国华
第1章绪论
习题
一、问答题
1. 什么是数据结构?
2. 四类基本数据结构的名称与含义。
3. 算法的定义与特性。
4. 算法的时间复杂度。
5. 数据类型的概念。
6. 线性结构与非线性结构的差别。
7. 面向对象程序设计语言的特点。
8. 在面向对象程序设计中,类的作用是什么?
9. 参数传递的主要方式及特点。
10. 抽象数据类型的概念。
二、判断题
1. 线性结构只能用顺序结构来存放,非线性结构只能用非顺序结构来存放。
2. 算法就是程序。
3. 在高级语言(如C、或PASCAL)中,指针类型是原子类型。
三、计算下列程序段中X=X+1的语句频度
for(i=1;i<=n;i++)
for(j=1;j<=i;j++)
for(k=1;k<=j;k++)
x=x+1;
[提示]:
1/2 = = (1+12)/2
i=1时:1 = (1+1)×1/2
2/2 = = (2+22)/2
i=2时:1+2= (1+2)×2/2
3/2 = = (3+32)/2
i=3时:1+2+3= (1+3)×3/2
…
n/2 = = (n+n2)/2
i=n时:1+2+3+……+n= (1+n)×n/2
f(n) = [ (1+2+3+……+n) + (12 + 22 + 32 + …… + n2 ) ] / 2
=[ (1+n)n/2 + n(n+1)(2n+1)/6 ] / 2
请浏览后下载,资料供参考,期待您的好评与关注!
=n(n+1)(n+2)/6
=n3/6+n2/2+n/3
区分语句频度和算法复杂度:
O(f(n)) = O(n3)
数据结构编程题汇总.docx
1、将两个递增的有序链表合并为一个递增的有序链表。要求结果链表仍使用原来两个链表的存储空间, 不另外占用其它的存储空间。表中不允许有重复的数据。
2、将两个非递减的有序链表合并为一个非递增的有序链表。要求结果链表仍使用原来两个链表的存储空间, 不另外占用其它的存储空间。表中允许有重复的数据。
3、已知两个链表A和B分别表示两个集合,其元素递增排列。请设计算法求出A与B 的交集,并存放于A链表中。
4、已知两个链表A和B分别表示两个集合,其元素递增排列。请设计算法求出两个集合A和B 的差集(即仅由在A中出现而不在B中出现的元素所构成的集合),并以同样的形式存储,同时返回该集合的元素个数。
5、设计算法将一个带头结点的单链表A分解为两个具有相同结构的链表B、C,其中B 表的结点为A表中值小于零的结点,而C表的结点为A表中值大于零的结点(链表A的元素类型为整型,要求B、C表利用A表的结点)。
6、设计一个算法,通过一趟遍历在单链表中确定值最大的结点。
7、设计一个算法,通过遍历一趟,将链表中所有结点的链接方向逆转,仍利用原表的存储空间。
8、设计一个算法,删除递增有序链表中值大于mink且小于maxk的所有元素(mink和maxk是给定的两个参数,其值可以和表中的元素相同,也可以不同)。
9、已知p指向双向循环链表中的一个结点,其结点结构为data、prior、next三个域,写出算法change(p),交换p所指向的结点和它的前缀结点的顺序。
知道双向循环链表中的一个结点,与前驱交换涉及到四个结点(p结点,前驱结点,前驱的前驱结点,后继结点)六条链。
《数据结构与算法》课后习题答案
2.3 课后习题解答
2.3.2 判断题
1.线性表的逻辑顺序与存储顺序总是一致的。(×)
2.顺序存储的线性表可以按序号随机存取。(√)
3.顺序表的插入和删除操作不需要付出很大的时间代价,因为每次操作平均只有近一半的元素需要移动。(×)
4.线性表中的元素可以是各种各样的,但同一线性表中的数据元素具有相同的特性,因此属于同一数据对象。(√)
5.在线性表的顺序存储结构中,逻辑上相邻的两个元素在物理位置上并不一定相邻。(×)
6.在线性表的链式存储结构中,逻辑上相邻的元素在物理位置上不一定相邻。(√)7.线性表的链式存储结构优于顺序存储结构。(×)
8.在线性表的顺序存储结构中,插入和删除时移动元素的个数与该元素的位置有关。(√)
9.线性表的链式存储结构是用一组任意的存储单元来存储线性表中数据元素的。(√)10.在单链表中,要取得某个元素,只要知道该元素的指针即可,因此,单链表是随机存取的存储结构。(×)
11.静态链表既有顺序存储的优点,又有动态链表的优点。所以它存取表中第i个元素的时间与i无关。(×)
12.线性表的特点是每个元素都有一个前驱和一个后继。(×)
2.3.3 算法设计题
1.设线性表存放在向量A[arrsize]的前elenum个分量中,且递增有序。试写一算法,将x 插入到线性表的适当位置上,以保持线性表的有序性,并且分析算法的时间复杂度。【提示】直接用题目中所给定的数据结构(顺序存储的思想是用物理上的相邻表示逻辑上的相邻,不一定将向量和表示线性表长度的变量封装成一个结构体),因为是顺序存储,分配的存储空间是固定大小的,所以首先确定是否还有存储空间,若有,则根据原线性表中元素的有序性,来确定插入元素的插入位置,后面的元素为它让出位置,(也可以从高下标端开始一边比较,一边移位)然后插入x ,最后修改表示表长的变量。
石家庄铁道大学数据结构试卷卷A
一、单项选择题(每小题2分,共20分)
1. 计算机中的算法是指解决某一问题的有限操作序列,它必须具备输入、输出、()等5个特性。
A. 可行性、可移植性和可扩充性
B. 可行性、有穷性和确定性
C. 确定性、有穷性和稳定性
D. 易读性、稳定性和确定性
2. 循环链表的主要优点是()。
A. 不再需要头指针
B. 已知某结点位置后能容易找到其直接前驱
C. 在进行插入、删除运算时能保证链表不断开
D. 在表中任一结点出发都能扫描整个链表
3. 已知指针p和q分别指向某单链表中第一个结点和最后一个结点。假设指针s指向另一个单链表中某个结点,则在s所指结点之后插入上述链表应执行的语句为()。
A. q->next=s->next;s->next=p;
B. s->next=p;q->next=s->next;
C. p->next=s->next;s->next=q;
D. s->next=q;p->next=s->next;
4. 判定一个顺序栈S(栈空间大小为n)为空的条件是()。
A. S->top==0
B. S->top!=0
C. S->top==n
D. S->top!=n
5. 循环队列用数组A[0,m-1]存放其元素值,已知其头尾指针分别是front和rear,则当前队列中的元素个数是()。
A. (rear-front+m)%m
B. rear-front+1
C. rear-front-1
D. rear-front
数据结构复习题目及答案
《数据结构-C语言版》
第一章绪论
单项选择题
1.在数据结构中,数据的基本单位是_____ ____。
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. n2
B. nlogn
C. n
D. logn
7.设使用某算法对n个元素进行处理,所需的时间是T(n)=100nlog2n+200n+2000,则该算法的渐近时间复杂度为____ ___。
A. O(1)
B. O(n)
C. O(200n)
D. O(nlog2n)
CDCBBDD
第二章线性表
单项选择题
1.链表不具有的特点是____ ____。
A. 可随机访问任一元素
B. 插入和删除时不需要移动元素
C. 不必事先估计存储空间
D. 所需空间与线性表的长度正比
2.设顺序表的每个元素占8个存储单元。第1个单元的存储地址是100,则第6个元素占用的最后一个存储单元的地址为。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
s=p;
p=p->next;
s->next=(*C)->next;
(*C)->next=s;
}
}
void print(LNode *p)//输出单链表
{
p=p->next;
while(p!=NULL)
{
printf("%d,",p->data);
p=p->next;
}
printf("\n");
}
void main()
q=B->next;// q始终指向链表B的第一个未比较的数据结点
*C=A;//生成链表的*C的头结点
(*C)->next=NULL;
free(B); //回收链表B的头结点空间
while(p!=NULL&&q!=NULL) //将A、B两链表中当前比较结点中值小者赋给*s
{
if(p->data<q->data)
LNode *CreateLinkList()//生成单链表
{
LNode *head,*p,*q;
int i,n;
head=(LNode*)malloc(sizeof(LNode));//生成头结点
head->next=NULL ;
p=head;
q=p;//指针q始终指向链尾结点
printf("Input length of list: \n");
{
LNode *A,*B,*C;
printf("Input data of list A:\n");
A=CreateLinkList();//生成单链表A
printf("Output list A:\n");
print(A);//输出单链表A
printf("Input data of list B:\n");
scanf("%d", &n);//读入结点数据
printf("Input data of list: \n");
for(i=1;i<=n;i++)//生成链表的数据结点
{
p=(LNode *)malloc(sizeof(LNode));//申请一个结点空间
scanf("%d",&p->data);
{
s=p;
p=p->next;
}
else
{
s=q;பைடு நூலகம்
q=q->next;
}
s->next=(*C)->next; //用头插法将结点*s插到链表*C的头结点之后
(*C)->next=s;
}
if(p==NULL)//如果指向链表A的指针*p为空,则使*p指向链表B
p=q;
while(p!=NULL) //将*p所指链表中的剩余结点依次摘下插入的链表C的链首
B=CreateLinkList();//生成单链表B
printf("Output list B:\n");
print(B);//输出单链表B
printf("Make list C:\n");
Merge(A,B,&C);//将升序链表A、B合并成降序链表C
printf("Output list C:\n");
将递增有序的单链表A和B合并成递减有序的单链表C
实现程序如下:
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
char data;//data为结点的数据信息
struct node *next;//next为指向后继结点的指针
}LNode;//单链表结点类型
p->next=NULL;
q->next=p;//在链尾插入
q=p;
}
return head;//返回指向单链表的头指针head
}
void Merge(LNode *A,LNode *B,LNode **C)
{ //将升序链表A、B合并成降序链表*C
LNode *p,*q,*s;
p=A->next;// p始终指向链表A的第一个未比较的数据结点
print(C);//输出单链表C
}