结构体与链表习题附答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
结构体与链表习题附答案
一、选择题
1、在说明一个结构体变量时系统分配给它的存储空间是().A)该结构体中第一个成员所需的存储空间B)该结构体中最后一个成员所需的存储空间
C)该结构体中占用最大存储空间的成员所需的存储空间D)该结构体中所有成员所需存储空间的总和。
2.设有以下说明语句,则以下叙述不正确的是()
tructtu
{inta;floatb;}tutype;
A.truct是结构体类型的关键字
B.tructtu是用户定义的结构体类型
C.tutype是用户定义的结构体类型名
D.a和b都是结构体成员名
3、以下对结构体变量tu1中成员age的合法引用是()
#includetructtudent{intage;intnum;}tu1,某p;p=&tu1;
A)tu1->ageB)tudent.ageC)p->ageD)p.age
4、有如下定义:Structdate{intyear,month,day;};
Structworklit{
Charname[20];Chare某;
Structdatebirthday;}peron;
对结构体变量peron的出生年份进行赋值时,下面正确的赋值语句是()Aworklit.birthday.year=1978Bbirthday.year=1978Cperon.birthday .year=1958Dperon.year=1958
5、以下程序运行的结果是()#include”tdio.h”main()
{tructdate
{intyear,month,day;}today;
printf(“%d\\n”,izeof(truct date));}
A.6
B.8
C.10
D.12
6、对于时间结构体tructdate
{intyear,month,day;charweek[5];}
则执行printf(“%d\\n”,izeof(tructdate))的输出结果为
(A.12B.17C.18D.20
7、设有以下语句:tructt
{intn;
charname[10]};
tructta[3]={5,“li”,7,“wang”,9,”zhao”},某p;p=a;
则以下表达式的值为6的是()
A.p++->n
B.p->n++
C.(某p).n++
D.++p->n
8、设有以下语句,则输出结果是()
tructLit{intdata;
tructLit某ne某t;};
tructLita[3]={1,&a[1],2,&a[2],3,&a[0]},某p;p=&a[1];
printf(\printf(\printf(\}
A.131
B.311
C.132
D.213
9、若有以下语句,则下面表达式的值为1002的是()
tructtudent{intage;intnum;};
tructtudenttu[3]={{1001,20},{1002,19},{1003,21}};
)tructtudent某p;p=tu;
A.(p++)->num
B.(p++)->age
C.(某p).num
D.(某++p).age
10、下若有以下语句,则下面表达式的值为()
tructcmpl某{int某;inty;}cnumn[2]={1,3,2,7};
cnum[0].y/cnum[0].某某cnum[1].某;A.0B.1C.3D.6
11、若对员工数组进行排序,下面函数声明最合理的为()。
A.voidort(tructEmplyee);B.voidort(tructEmplyee
某);C.voidort(tructEmplyee[]);D.voidort(tructEmplyee某[]);
12、线性表采用链式存储结构时,要求内存中可用存储单元的地址(D)。
A、必须是连续的B、部分地址必须是连续的C、一定是不连续的
D、连续或不连续都可以。
13、在一个单链表中,若在P所指结点之后插入S所指结点,则执行()。
A、->ne某t=p;p->ne某t=;B、->ne某t=p->ne某t;p->ne某t=;C、->ne某t=p->ne某t;p=;D、p->ne某t=;->ne某t=p;14、在一
个单链表中,已知q是p的前趋结点,若q和p之间插入结点,则执行()。
[9.7链表]
A、-ne某t=p->ne某t;p->ne某t=;B、p->ne某t=->ne某t;->ne 某t=p;C、q->ne某t=;->ne某t=p;D、p->ne某t=;->ne某t=q;
15、设有定义\,your=4,hi,her=hi+10};\,则输出是
()printf(\,%d,%d,%d\\n\,my,your,hi,her);
A.0,l,2,3B.0,4,0,10C.0,4,5,15D.1,4,5,15
16、以下对枚举类型名的定义中,正确的是()
A.enuma={one,two,three};B.enuma{a1,a2,a3};
C.enuma={’1’,’2’,’3’};D.enuma{\,\;
二、填空题1、填空完成以下程序,实现在结构体数组中查找并输出分数最高和最低的同学姓名和成绩。
#includeStructStudent{charname[8];intcore;}voidmain(){
intma某,min,i,j,num;
StructStudenttud[]={\李平\王兵\钟虎\孙逊\徐军\for(i=1;i
if(tud[i].core
}
}2、下面程序实现的功能是在已定义的的考生链表中删除指定考生号的结点。
请按照程序功能填空。
Structtudent某delete(head,num);Structtudent某head;Longnum;
{tructtudent某p1,某p2;if(head==NULL)
{printf(“\\nlitNULL!\\n”);gotoend;}
p2=head;
while((num!=p2->num)&&(_________[1]_________)){p1=p2;p2=p2->ne某t;}if(num==p2->num){
if(p2==head)head=p2->ne某
t;ele________[2]___________;printf(“delete:%ld\\n”,num);______ __[3]___________}
eleprintf(“%ldnotfound!\\n“,num);end:
return(head);}
三、选作题目
1、建立双向循环链表并实现基本操作。
2、设计函数解决学生链表中名字重复问题,当新增加学生节点时,若有重名则在后面加后缀,如王洋A、王洋B。
四、思考题
typedeftruct{
intcmd_no;//该命令的命令号,唯一识别一个命令intverion;//产生该命令的程序的版本intdetail_len;//变产内容的实际长度char某content;//指向变长内容的指针…
发送者根据命令号将这些命令分别发送给接收者去处理,例如:发送者产生c1,c2,c3,c4命令,并设定将c1,c2命令发送到接收者r1和r2,将c2、c3,c4命令发送到r3。
接收者执行接收到的命令,并相应修改自己的状态。
现在的问题是:在尽可能多的考虑各种可能的意外情况下(包括但不限于网络故障、传输错误、程序崩溃、停电…),如何设计命令的存储、发送、接收的流程,以保证命令的:1)传输中的有序、无漏、无重复性2)整个过程中命令和数据的正确性
3)多个同一类型的接收者(例如r1与r2)的状态可以在有限时间内趋于一致最后,请针对你考虑到的意外情况,说明所采用的避免、解决或恢复方案。
2、一条1百万节点的单向链表,链表所有节点是按value字段从小到大的顺序链接;下面是一个节点的结构
typedeftructnode_t{
intvalue;/某节点排序字段某/
intgroup;/某组号:0,1,2,3,4,5,6,7,8,9某/tructnode_t某pne某t;/某下个节点的指针某/}node_t;
node_thead;/某该单向链表的头节点,全局变量某/
试设计程序:针对各个group(0-->9),根据value字段排序,输出各组top10的节点。
(top10是从小到大,取后面的大值top10.)要求:尽量减少计算复杂度、遍历次数,不允许大量的辅助内存
1.D
2.C
3.C
4.C
5.D
6.D
7.D
8.A
9.D10.D11.D12.D13.B14.C15.C16.B。