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