数据结构练习题线性表习题及答案Word格式.docx
《数据结构练习题线性表习题及答案Word格式.docx》由会员分享,可在线阅读,更多相关《数据结构练习题线性表习题及答案Word格式.docx(26页珍藏版)》请在冰豆网上搜索。
L.last=L.last+1;
}
11.对于顺序表的插入算法insert_sqlist来说,若以结点移动为标准操作,则插入算法的最坏时间复杂性为,量级是。
插入算法的平均时间复杂性为,平均时间复
杂性量级是。
12.以下为顺序表的删除运算,分析算法,请在处填上正确的语句。
voiddelete_sqlist(sqlistL,inti)/*删除顺序表L中的第i-1个位置上的结点*/
{if((i<
L.last))error(“非法位置”);
for(j=i+1;
j=L.last;
j++);
L.last=L.last-1;
13.对于顺序表的删除算法delete_sqlist来说,若以结点移动为标准操作,最坏情况时间复杂性及其量级分别是和,其平均时间复杂性及其量级分别为.
和。
14.以下为顺序表的定位运算,分析算法,请在处填上正确的语句。
intlocate_sqlist(sqlistL,datatypeX)
/*在顺序表L中查找第一值等于X的结点。
若找到回传该结点序号;
否则回传0*/
{;
while((i≤L.last)&
&
(L.data[i-1]!
=X))i++;
if()return(i);
elsereturn(0);
15.对于顺序表的定位算法,若以取结点值与参数X的比较为标准操作,平均时间复杂性量级为
。
求表长和读表元算法的时间复杂性为。
16.在顺序表上,求表长运算LENGTH(L)可通过输出实现,读表元运算
GET(L,i)可通过输出实现。
17.线性表的常见链式存储结构有、和。
18.单链表表示法的基本思想是用表示结点间的逻辑关系。
19.所有结点通过指针的链接而组织成。
20.为了便于实现各种运算,通常在单链表的第一个结点之前增设一个类型相同的结点,称为,其它结点称为。
21.在单链表中,表结点中的第一个和最后一个分别称为和。
头结点的数据域
可以不存储,也可以存放一个或。
22.单链表INITIATE(L)的功能是建立一个空表。
空表由一个和一个组成。
23.INITIATE()的功能是建立一个空表。
请在处填上正确的语句。
lklistinitiate_lklist()/*建立一个空表*/
return(t);
24.以下为求单链表表长的运算,分析算法,请在处填上正确的语句。
intlength_lklist(lklisthead)/*求表head的长度*/
j=0;
while(p->
next!
=NULL)
j++;
return(j);
/*回传表长*/
25.以下为单链表按序号查找的运算,分析算法,请在处填上正确的语句。
pointerfind_lklist(lklisthead,inti)
{p=head;
while()
{p=p->
next;
j++;
}
if(i==j)return(p);
elsereturn(NULL);
26.以下为单链表的定位运算,分析算法,请在处填上正确的语句
intlocate_lklist(lklisthead,datatypex)
0*/
/*求表head中第一个值等于x的结点的序号。
不存在这种结点时结果为
while(){p=p->
if(p->
data==x)return(j);
}return(head);
该建表算法的时间复杂性约等于,其量级为
处填上正确的语句。
直接实现的建表算法。
*/
30.以下为单链表的建表算法,分析算法,请在lklistcreate_lklist2()/*
{head=malloc(size);
p=head;
scanf(“%f”,&
x);
while(x!
='
$'
)
{q=malloc(size);
q->
data=x;
p->
next=q;
scanf(“%f”,&
return(head);
此算法的量级为。
31.除单链表之外,线性表的链式存储结构还有和等。
32.循环链表与单链表的区别仅仅在于其尾结点的链域值不是,而是一个指向
的指针。
33.在单链表中若在每个结点中增加一个指针域,所含指针指向前驱结点,这样构成的链表中有
两个方向不同的链,称为。
34.C语言规定,字符串常量按处理,它的值在程序的执行过程中是不能改变的。
而串变
量与其他变量不一样,不能由语句对其赋值。
35.含零个字符的串称为串,用表示。
其他串称为串。
任何串中所含
的个数称为该串的长度。
36.当且仅当两个串的相等并且各个对应位置上的字符都时,这两个串相等。
一个
串中任意个连续字符组成的序列称为该串的串,该串称为它所有子串的串。
37.串的顺序存储有两种方法:
一种是每个单元只存一个字符,称为格式,另一种是每个
单元存放多个字符,称为格式。
38.通常将链串中每个存储结点所存储的字符个数称为。
当结点大小大于1时,链串的最
后一个结点的各个数据域不一定总能全被字符占满,此时,应在这些未用的数据域里补上。
三、单向选择题
1.对于线性表基本运算,以下结果是正确的是()
1初始化INITIATE(L),引用型运算,其作用是建立一个空表L=Ф
.②求表长LENGTH(L),引用型运算,其结果是线性表L的长度
3读表元GET(L,i),引用型运算。
若1<
=LENGTH(L),其结果是线性表L的第i个结点;
否则,结果为0
4定位LOCATE(L,X),引用型运算.若L中存在一个或多个值与X相等的结点,运算结果为这些结点的序号的最大值;
否则运算结果为0
5插入INSERT(L,X,i),加工型运算。
其作用是在线性表L的第i+1个位置上增加一个以X为值的新结点
6删除DELETE(L,i),引用型运算.其作用是撤销线性表L的第i个结点Ai
2.线性结构中的一个结点代表一个()
1数据元素②数据项③数据④数据结构3.顺序表的一个存储结点仅仅存储线性表的一个()
①数据元素
②数据项
③数据
④数据结构
4.顺序表是线性表的
()
①链式存储结构
②顺序存储结构
③索引存储结构
④
散列存储结构
5.对于顺序表,以下说法错误的是
(
)
1顺序表是用一维数组实现的线性表,数组的下标可以看成是元素的绝对地址
2顺序表的所有存储结点按相应数据元素间的逻辑关系决定的次序依次排列
3顺序表的特点是:
逻辑结构中相邻的结点在存储结构中仍相邻
4顺序表的特点是:
逻辑上相邻的元素,存储在物理位置也相邻的单元中
6.对顺序表上的插入、删除算法的时间复杂性分析来说,通常以()为标准操作
1条件判断②结点移动
③算术表达式④赋值语句
7.对于顺序表的优缺点,以下说法错误的是()
1无需为表示结点间的逻辑关系而增加额外的存储空间
2可以方便地随机存取表中的任一结点
3插人和删除运算较方便
4由于顺序表要求占用连续的空间,存储分配只能预先进行(静态分配)
5容易造成一部分空间长期闲置而得不到充分利用
8.指针的全部作用就是()
1指向某常量②指向某变量
③指向某结点④存储某数据
9.除了(),其它任何指针都不能在算法中作为常量出现,也无法显示。
1头指针②尾指针
③指针型变量④空指针
10.单链表表示法的基本思想是指针P表示结点间的逻辑关系,则以下说法错误的是()
1任何指针都不能用打印语句输出一个指针型变量的值
2如果要引用(如访问)p所指结点,只需写出p(以后跟域名)即可
3若想修改变量p的值(比如让P指向另一个结点),则应直接对p赋值
4对于一个指针型变量P的值。
只需知道它指的是哪个结点
5结点*p是由两个域组成的记录,p->
data是一个数据元素,p->
next的值是一个指针
11.单链表的一个存储结点包含()
1数据域或指针域
2指针域或链域
3指针域和链域
4数据域和链域
12.对于单链表表示法,以下说法错误的是()
1数据域用于存储线性表的一个数据元素
2指针域或链域用于存放一个指向本结点所含数据元素的直接后继所在结点的指针③所有数据通过指针的链接而组织成单链表
④NULL称为空指针,它不指向任何结点,只起标志作用
13.对于单链表表示法,以下说法错误的是()
1指向链表的第一个结点的指针,称为头指针
2单链表的每一个结点都被一个指针所指
3任何结点只能通过指向它的指针才能引用
4终端结点的指针域就为NULL
5尾指针变量具标识单链表的作用,故常用尾指针变量来命名单链表14.有时为了叙述方便,可以对一些概念进行简称,以下说法错误的是()
1将“指针型变量”简称为“指针”
2将“头指针变量”称为“头指针”③将“修改某指针型变量的值”称为“修改某指针”
④将“p中指针所指结点”称为“P值”
15.设指针P指向双链表的某一结点,则双链表结构的对称性可用()式来刻画
1p->
prior->
next->
==p->
next
2p->
prior
3p->
4p->
next==p->
16.以下说法错误的是()①对循环链表来说,从表中任一结点出发都能通过前后操作而扫描整个循环链表②对单链表来说,只有从头结点开始才能扫描表中全部结点③双链表的特点是找结点的前趋和后继都很容易
④对双链表来说,结点*P的存储位置既存放在其前趋结点的后继指针域中,也存放在它的后继结点的前趋指针域中。
17.在循环链表中,将头指针改设为尾指针(rear)后,其头结点和尾结点的存储位置分别是()
①real和rear->
2rear->
next和real
3rear->
next和rear
4rear和rear->
18.以下说错误的是()
①对于线性表来说,定位运算在顺序表和单链表上的量级均为O(n)
2读表元运算在顺序表上只需常数时间O
(1)便可实现,因此顺序表是一种随机存取结构
3在链表上实现读表元运算的平均时间复杂性为O
(1)
4链入、摘除操作在链表上的实现可在O
(1)时间内完成
5
O(n)
链入、摘除操作在顺序表上的实现,平均时间复杂性为19.在串的基本运算中,属于加工型运算的有()
①EQAL(S,T)②LENGTH(S)
3CONCAT(S,T)④REPLACE(S,T,R)⑤INDEX(S,T)20.在串的基本运算中,属于引用型运算的有()①ASSIGN(S,T)②INSERT(S1,i,S2)
3DELETE(S,i,j)④SUBSTR(S,i,j)⑤REPLACE(S,T,R)
21.循环链表主要优点是()
①不再需要头指针了②已知某个结点的位置后,能够容易找到它的直接前趋③在进行插入、删除运算时,能更好地保证链表不断开④从表中任一结点出发都能扫描到整个链表22,每种数据结构都具备三个基本操作:
插入、删除和查找,这种说法()
①正确②错误23.以下说法错误的是()①数据的物理结构是指数据在计算机内实际的存储形式②算法和程序没有区别,所以在数据结构中二者是通用的③对链表进行插人和删除操作时,不必移动结点④双链表中至多只有一个结点的后继指针为空24.以下说法正确的是
①线性结构的基本特征是:
每个结点有且仅有一个直接前趋和一个直接后继②线性表的各种基本运算在顺序存储结构上的实现均比在链式存储结构上的实现效率要低③在线性表的顺序存储结构中,插人和删除元素时,移动元素的个数与该元素位置有关④顺序存储的线性表的插人和删除操作不需要付出很大的代价,因为平均每次操只有近一半的元素需要移动
25.以下说法错误的是()
①求表长、定位这二种运算在采用顺序存储结构时实现的效率不比采用链式存储结构时实现的效率低
2顺序存储的线性表可以随机存取③由于顺序存储要求连续的存储区域,所以在存储管理上不够灵活④线性表的链式存储结构优于顺序存储结构
26.以下说法错误的是()
①线性表的元素可以是各种各样的,逻辑上相邻的元素在物理位置上不一定相邻②在线性表的顺序存储结构中,逻辑上相邻的两个元素在物理位置上不一定相邻③在线性表的链式存储结构中,逻辑上相邻的元素在物理位置上不一定相邻④线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素27.以下说法正确的是()
①在单链表中,任何两个元素的存储位置之间都有固定的联系,因为可以从头结点进行查找任何一个元素
2
因此,单链表是随机存取的存储
在单链表中,要取得某个元素,只要知道该元素的指针即可,
结构
3顺序存储结构属于静态结构,链式结构属于动态结构④顺序存储方式只能用于存储线性结构
28.以下说法正确的是()①顺序存储方式的优点是存储密度大、且插入、删除运算效率高②链表的每个结点中都恰好包含一个指针③线性表的顺序存储结构优于链式存储结构
4顺序存储结构属于静态结构,链式结构属于动态结构
29.下面关于线性表的叙述正确的是()①线性表采用顺序存储,必须占用一片连续的存储单元②线性表采用顺序存储,便于进行插人和删除操作③线性表采用链接存储,不必占用一片连续的存储单元④线性表采用链接存储,不便于插人和删除操作
30.线性表L=(a,a,...,a,...,a),下列说法正确的是()
n12i①每个元素都有一个直接前驱和直接后继②线性表中至少要有一个元素
③表中诸元素的排列顺序必须是由小到大或由大到小的
4除第一个元素和最后一个元素外其余每个元素都有一个且仅有一个直接前驱和直接后继
31.线性表的逻辑顺序与存储顺序总是一致的,这种说法
①正确②不正确
32.设p,q是指针,若p=q,则*p=*q,这种说法()
33.线性表若采用链表存储结构时,要求内存中可用存储单元的地址
①必需是联系的②部分地址必须是连续的
③一定是不连续的④连续不连续都可以
34.
则删除表首结点的操作可表示为
设REAR是指向非空带头结点的循环单链表的尾指针()
②rear=rear->
free(rear);
①p=rear;
rear=rear->
free(p)
3rear=rear->
④p=rear->
rear->
next=p->
free(p);
35.单链表中,增加头结点的目的是为了()
①使单链表至少有一个结点②标示表结点中首结点的位置
3方便运算的实现④说明单链表是线性表的链式存储实现
36线性结构中的一个结点代表一个数据元素,通常要求同一线性结构的所有结点所代表的数据元素具有相同的特性,这意味着
①每个结点所代表的数据元素都一样。
2每个结点所代表的数据元素包含的数据项的个数要相等
③不仅数据元素包含的数据项的个数要相同,而且对应数据项的类型要一致
4结点所代表的数据元素有同一特点37.带头结点的单链表Head为空的判定条件是①Head=Null②Head->
next=NULL③Head->
next=Head
38.非空的单循环链表L的尾结点*P,满足
P->
next=LP=L.
next=NULLP=NULL
39.双向链表结点结构如下:
LLink
data
RLink其中:
LLink是指向前驱结点的指针域:
data是存放数据元素的数据域;
Rlink是指向后继结点的指针域。
下面给出的算法段是要把一个新结点*Q作为非空双向链表中的结点*p的前驱,插入到此双向链
表中。
不能正确完成要求的算法段是
①Q->
LLink=P->
LLink;
②P->
LLink=Q;
Q->
Rlink=P;
Q->
P->
LLink->
Rlink=Q;
③Q->
40.若某线性表中最常用的操作是取第i个元素和找第i个元素的前趋元素,则采用()存储方式最节省时间。
①顺序表②单链表③双链表④单循环链表41.串是任意有限个
①符号构成的集合②符号构成的序列
③字符构成的集合④字符构成的序列
四、简答及应用
1.请用类C语言描述顺序表,并予以解释说明。
2.请用类C语言描述单链表的类型定义,并予以解释说明。
3.请用类C语言描述双链表的类型定义,并予以解释说明。
4.请用类C语言描述顺序串的类型定义。
5.请用类C语言描述链串的类型定义。
6.叙述以下概念的区别:
头指针变量、头指针、头结点、首结点,并说明头指针变量和头结点的作用。
7.有哪些链表可仅由一个尾指针来惟一确定,即从尾指针出发能访问到链表上任何一个结点。
8.简述下列每对术语的区别:
空串和空格串;
串变量和串常量;
主串和子串;
串变量的名字与串变量的值。
9.设有A=””?
尽畭敬,?
潜摬,D=my,试计算下列运算的结果(注:
A+B是CONCA(TA,B)的简写?
尽尠的尠尠含有两个空格)。
(a)A+B
(b)B+A
(c)D+C+B
(d)SUBSTR(B,3,2)
(e)SUBSTR(C,1,0)
(f)LENGTH(A)
(g)LENGTH(D)
(h)INDEX(B,D)
(i)INDEX(C,d)
(j)INSERT(D,2,C)
(k)INSERT(B,1,A)
(l)DELETE(B,2,2)
(m)DELETE(B,2,0)
10.已知区尽砨穹?
?
礪。
试利用连接、求子串和置换等基本运算,将S转换为T。
五、算法设计
1.设A=(a,a,a,a)和B=(b,b,...,b)是两个线性表(假定所含数据元素均为m1n1223整数)。
若n=m且a=b(i=1,...,n),则称A=B;
若a=b(i=1,...,j)且a<
b(j<
n<
=m),则j+1j+1iiii称A<
B;
在
其他情况下均称A>
B。
是编写一个比较A和B的算法,当A<
B,A=B或A>
B是分别输出-1,0或者1。
2,试编写在无头结点的单链表上实现线性表基本运算LOCATE(L,X)、INSERT(L,X,i)和DELETE(L,i)的算法,并和在带头结点的单链表上实现相的算法进行比较。
3.试编写在不带头结点的单链表上实现线性表基本运算LENGTH(L)的算法。
4.假设有两个按数据元素值递增有序排列的线性表A和B,均以单链表作存储结构。
编写算.
法将A表和B表归并成一个按元素值递减有序(即非递增有序,允许值相同)排列的线性表C,
并要求利用原表(即A表和B表的)结点空间存放表C。
5.设有线性表A=(a,a,...,a)和B=(b,b,...,b).试写合并A、B为线性表C的算法,n1122m使得:
(a1,b1,...,am,bm,bm?
1,bn)当m?
n?
;
C=?
(a1,b1,...,an,bn,an?
1,...,am)当m?
n;
假设A、B均以单链表为存储结构(并且m、n显示保存)。
要求C也以单链表为存储结构并利用单链表A、B
的结点空间。
6,设线性表存放在向量A[arrsize]的前elenum分量中,且递增有序。
试写一算法,将X插入
到线性表的适当位置上,以保持线性表的有序性,并且分析算法的时间复杂性。
7.已知单链表L中的结点是按值非递减有序排列的,试写一算法将值为x的结点插入表L中,
使得L仍然有序。
8,试分别以