结构体与链表习题 附答案

合集下载

(完整版)结构体与联合体习题与参考答案

(完整版)结构体与联合体习题与参考答案

(完整版)结构体与联合体习题与参考答案第八章结构体与联合体选择题1、若程序中有以下的说明和定义:struct abc{ int x;char y; } 花括号后少了分号。

struct abc s1,s2;则会发生的情况是______。

A) 编译时错B) 程序将顺序编译、连接、执行C) 能顺序通过编译、连接、但不能执行D) 能顺序通过编译、但连接出错2、有以下程序段struct st{ int x; int *y;}*pt;int a[]={1,2};b[]={3,4};struct st c[2]={10,a,20,b};pt=c;以下选项中表达式的值为11的是A) *pt->y B) pt->x C) ++pt->x D) (pt++)->x3、有以下说明和定义语句struct student{ int age; char num[8];};struct student stu[3]={{20,"200401"},{21,"200402"},{19,"200403"}};struct student *p=stu;以下选项中引用结构体变量成员的表达式错误的是______。

A) (p++)->num B) p->num C) (*p).num D) stu[3].age4、设有如下枚举类型定义enum language{Basic=3,Assembly=6,Ada=100,COBOL,Fortran};枚举量Fortran的值为______。

A) 4 B) 7 C) 102 D) 1035、以下叙述中错误的是_________。

A)可以通过typedef增加新的类型B)可以用typedef将已存在的类型用一个新的名字来代表C)用typedef定义新的类型名后,原有类型名仍有效D)用typedef可以为各种类型起别名,但不能为变量起别名6、有以下程序段typedef struct NODE{ int num; struct NODE *next;} OLD;以下叙述中正确的是A)以上的说明形式非法B) NODE是一个结构体类型C) OLD是一个结构体类型D) OLD是一个结构体变量7、以下选项中不能正确把cl定义成结构体变量的是______。

C程序设计(链表)习题与答案

C程序设计(链表)习题与答案

一、单选题1、链表不具有的特点是()。

A.不必事先估计存储空间B.插入、删除不需要移动元素C.可随机访问任一元素D.所需空间与线性表长度成正比正确答案:C2、链接存储的存储结构所占存储空间()。

A.分两部分,一部分存放结点值,另一部分存放结点所占单元数B.只有一部分,存放结点值C.分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针D.只有一部分,存储表示结点间关系的指针正确答案:C3、链表是一种采用()存储结构存储的线性表。

A.网状B.星式C.链式D.顺序正确答案:C4、有以下结构体说明和变量的定义,且指针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;正确答案:B5、下面程序执行后的输出结果是()。

#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));p->num=10; q->num=20; r->num=30;p->next=q;q->next=r;printf("%d",p->num+q->next->num);return 0;}A.30B.40C.10D.20正确答案:B6、下面程序执行后的输出结果是()。

数据结构考试复习题及答案 (19)

数据结构考试复习题及答案 (19)

1. 什么是链表?链表有哪些优点和缺点?答案:链表是一种数据结构,其中每个元素包含数据和指向下一个元素的指针。

链表的优点是可以动态分配内存,缺点是插入和删除操作需要遍历链表。

2. 什么是二叉树?二叉树有哪些基本操作?答案:二叉树是一种树形数据结构,其中每个节点最多有两个子节点,通常称为左子节点和右子节点。

二叉树的基本操作包括插入、删除、搜索和遍历。

3. 什么是堆?堆有哪些性质?答案:堆是一种完全二叉树,通常用于实现优先队列。

堆具有上三角性质,即每个节点的值都大于或等于其子节点的值。

4. 什么是哈希表?哈希表有哪些优点和缺点?答案:哈希表是一种基于哈希函数的数据结构,用于快速查找和插入元素。

哈希表的优点是查找和插入时间复杂度为O(1),缺点是哈希冲突可能导致性能问题。

5. 什么是并查集?并查集有哪些应用?答案:并查集是一种数据结构,用于处理不相交集合的合并和查询问题。

并查集的应用包括图形连通性检测、线段树等。

6. 解释并解释栈和队列这两种基本数据结构。

答案:栈是一种后进先出(LIFO)的数据结构,只能在一端(称为栈顶)进行插入和删除操作。

队列是一种先进先出(FIFO)的数据结构,可以在两端(称为队首和队尾)进行插入和删除操作。

7. 在使用二叉搜索树时,为什么经常使用中序遍历而不是前序或后序遍历?答案:二叉搜索树的中序遍历按照元素的顺序进行,可以保证访问的元素按照从小到大的顺序排列。

这使得在中序遍历中查找特定元素的时间复杂度为O(log n),比前序或后序遍历更高效。

8. 解释并解释图的数据结构。

答案:图是一种由节点和边组成的数据结构,用于表示对象之间的关系。

可以使用邻接表或邻接矩阵等数据结构来表示图。

9. 解释并解释堆排序算法。

答案:堆排序是一种基于堆的数据结构的排序算法,通过构建最大堆或最小堆,然后交换堆顶元素和最后一个元素的位置,重复这个过程直到所有元素都排好序。

10. 在使用B树或B+树作为索引结构时,为什么需要保持数据和索引的分离?答案:B树或B+树作为索引结构时,需要保持数据和索引的分离是为了提高查询效率。

结构体与链表习题附答案

结构体与链表习题附答案

结构体与链表习题附答案一、选择题1、在说明一个结构体变量时系统分配给它的存储空间是().A)该结构体中第一个成员所需的存储空间B)该结构体中最后一个成员所需的存储空间C)该结构体中占用最大存储空间的成员所需的存储空间D)该结构体中所有成员所需存储空间的总和。

2.设有以下说明语句,则以下叙述不正确的是( )struct stu{int a;float b;}stutype;A. struct 是结构体类型的关键字B. struct stu 是用户定义的结构体类型C. stutype 是用户定义的结构体类型名D. a 和b 都是结构体成员名3、以下对结构体变量stu1中成员age的合法引用是()#includestruct student{int age;int num;}stu1,*p;p=&stu1A)stu1->age B)student.age C)p->age D) p.age4、有如下定义:Struct date{int year,month,day;};Struct worklist{Char name[20];Char sex;Struct date birthday;}person;对结构体变量person的出生年份进行赋值时,下面正确的赋值语句是( ) 。

A worklist .birthday.year=1978B birthday.year=1978C person.birthday.year=1958D person.year=19585、以下程序运行的结果是( ) 。

#include”stdio.h”main(){ struct date{ int year , month , day ;} today ;printf(“%d\n”,sizeof(struct date));}A .6 B.8 C.10 D.126、对于时间结构体struct date{ int year , month , day ;char week[5];}则执行printf(“%d\n”,sizeof(struct date))的输出结果为( ) 。

数据结构:链表单元测试与答案

数据结构:链表单元测试与答案

一、单选题1、线性表采用链式存储时,其地址______。

A.部分地址必须是连续的B.一定是不连续的C.连续与否均可以D.必须是连续的正确答案:C2、从一个具有n个结点的单链表中查找值等于x的结点时,在查找成功的情况下,需要平均比较______个结点。

A.(n-1)/2B.(n+1)/2C.nD.n/2正确答案:B3、能够满足快速完成插入和删除运算的线性表存储结构是____。

A.有序存储B.链式存储C.顺序存储D.散列存储正确答案:B4、已知单向链表中指针p指向结点A,______表示删除A的后继结点(若存在)的链操作(不考虑回收)。

A.p—>next=pB.p=p—>next—>nextC.p=p—>nextD.p—>next=p—>next—>next正确答案:D5、在一个单向链表中,已知结点*q是*p的前趋结点,若在*q和*p 之间插入*s结点,则须执行_____。

A. p—>next= s—>next;s—>next= p;B.s—>next= p—>next;p—>next=s;C.p—>next=s; s—>next=q;D. q—>next=s; s—>next= p;正确答案:D6、已知h是指向单向加头链表的头指针,删除首元结点(第1个实际元素)的操作是_____。

A.p=h->next;free(p);h=h->next;B.p=h,h=p->next;free(p);C.p=h->next,h->next=p->next;free(p);D.free(h->next);h=h->next;正确答案:C7、就单一的____运算来说,线性表采用顺序存储比采用链式存储好(n是表长)。

A.输出所有结点B.查找结点x在表中的序号C.存取任意第i(0≤i≤n-1)个结点D.交换前两个结点的值正确答案:C8、判定以head为头指针的单向简单链表为空的条件是 ______。

数据结构(c语言版)课后习题答案完整版

数据结构(c语言版)课后习题答案完整版

数据结构(c语言版)课后习题答案完整版数据结构(C语言版)课后习题答案完整版一、数据结构概述数据结构是计算机科学中一个重要的概念,用来组织和存储数据,使之可以高效地访问和操作。

在C语言中,我们可以使用不同的数据结构来解决各种问题。

本文将提供完整版本的C语言数据结构的课后习题答案。

二、顺序表1. 顺序表的定义和基本操作顺序表是一种线性表,其中的元素在物理内存中连续地存储。

在C 语言中,我们可以通过定义结构体和使用指针来实现顺序表。

以下是顺序表的一些基本操作的答案:(1)初始化顺序表```ctypedef struct{int data[MAX_SIZE];int length;} SeqList;void InitList(SeqList *L){L->length = 0;}```(2)插入元素到顺序表中```cbool Insert(SeqList *L, int pos, int elem){if(L->length == MAX_SIZE){return false; // 顺序表已满}if(pos < 1 || pos > L->length + 1){return false; // 位置不合法}for(int i = L->length; i >= pos; i--){L->data[i] = L->data[i-1]; // 向后移动元素 }L->data[pos-1] = elem;L->length++;return true;}```(3)删除顺序表中的元素```cbool Delete(SeqList *L, int pos){if(pos < 1 || pos > L->length){return false; // 位置不合法}for(int i = pos; i < L->length; i++){L->data[i-1] = L->data[i]; // 向前移动元素 }L->length--;return true;}```(4)查找顺序表中的元素```cint Search(SeqList L, int elem){for(int i = 0; i < L.length; i++){if(L.data[i] == elem){return i + 1; // 找到元素,返回位置 }}return -1; // 未找到元素}```2. 顺序表习题解答(1)逆置顺序表```cvoid Reverse(SeqList *L){for(int i = 0; i < L->length / 2; i++){int temp = L->data[i];L->data[i] = L->data[L->length - 1 - i]; L->data[L->length - 1 - i] = temp;}}```(2)顺序表元素去重```cvoid RemoveDuplicates(SeqList *L){for(int i = 0; i < L->length; i++){for(int j = i + 1; j < L->length; j++){if(L->data[i] == L->data[j]){Delete(L, j + 1);j--;}}}}```三、链表1. 单链表单链表是一种常见的链式存储结构,每个节点包含数据和指向下一个节点的指针。

结构体、链表综合习题

结构体、链表综合习题

已知某链表中结点的数据结构定义如下: #include<stdio.h> struct node{int x; struct node *next;}; 函数loop的功能是:根据dir的值循环移位head指向的链 表中的所有结点,当dir结点的指针。 例如,移位前的链表数据:head->1->3->5->4, 移一次后的链表数据:head->4->1->3->5。 算法提示:循环右移时,将链表最后一个结点删除,再将 其插入到链表首部;循环左移时,将链表第一个结点删 除,再将其连接到链表尾部。
结构体、链表综合习题
若要使表达式“P++”无语法错误,则变量P不能声明为 ___________。 D A. int P; B. double P; C. int *P; D. struct{int x;}P;
结构体、链表综合习题
数组和链表都可以用于存储一组彼此有关联的数据,以 下说法中不正确的是: B A:数组占用一块连续的存储区域,链表可能占用 若 干不连续的存储区域 B:数组和链表所占用的存储区域均不能在程序运行期 间动态地分配 C:数组中的数据可以随机存取或顺序存取,链表中的 数据只能顺序存取 D:数组的长度是固定的,链表的长度是不固定的
.以下程序中函数padd的功能是:调整pa指向的链表中各结点的位置,使得所
(1)p1!=pa #include<stdlib.h> typedef struct p{ int x; struct p *next;} PNODE; (2)p2->next PNODE *padd(PNODE *pa) {PNODE *p1, *p2,*p; p1=p2=pa; (3)pa=p while(p1) (4)NULL {if(p1->x%2= =0&& (1) ) {p=p1; p1=p1->next; (2) =p1; p->next=pa;(3) ; } else {p2=p1;p1=p1->next;} } return pa;} main() {PNODE a[10]={{1},{2},{3},{4},{5},{6},{7},{8},{9},{10}},*ha=a,*p; int i ; for(i=0;i<9;i++)a[i].next=&a[i+1]; a[9].next= (4) ; ha=padd(ha); p=ha; printf("\n"); while(p) {printf("%d->",p->x);p=p->next;}}

数据结构试题及答案c语言版

数据结构试题及答案c语言版

数据结构试题及答案c语言版一、选择题(每题2分,共20分)1. 在C语言中,以下哪个选项是正确的链表定义?A. struct Node { int data; struct Node *next; };B. struct Node { int data; Node *next; };C. struct Node { int data; struct Node *next; } *Node;D. struct Node { int data; Node *next; };答案:A2. 下列关于栈的描述中,错误的是?A. 栈是一种后进先出(LIFO)的数据结构。

B. 栈的插入操作称为push。

C. 栈的删除操作称为pop。

D. 栈可以存储任意数量的数据。

答案:D3. 在C语言中,以下哪个关键字用于定义一个结构体?A. structB. unionC. enumD. typedef答案:A4. 下列关于队列的描述中,正确的是?A. 队列是一种先进先出(FIFO)的数据结构。

B. 队列只能从队尾进行插入操作。

C. 队列的插入操作称为pop。

D. 队列的删除操作称为push。

答案:A5. 在C语言中,以下哪个函数用于创建一个动态数组?A. mallocB. callocC. reallocD. all of the above答案:D6. 下列关于二叉树的描述中,错误的是?A. 二叉树的每个节点最多有两个子节点。

B. 二叉树的子节点被称为左子树和右子树。

C. 二叉树的遍历方式包括前序、中序、后序。

D. 二叉树的每个节点只能有一个子节点。

答案:D7. 在C语言中,以下哪个函数用于释放动态分配的内存?A. freeB. mallocC. callocD. realloc答案:A8. 下列关于图的描述中,错误的是?A. 图是由顶点和边组成的数据结构。

B. 图的边可以是有向的,也可以是无向的。

C. 图的顶点可以是孤立的,没有边与之相连。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
struct student *p ;
p=stu ;
A. (p++) -> num B. (p++)->age C. (*p) . num D. (*++p) . age
10、下若有以下语句,则下面表达式的值为( )。
struct cmplx{int x;int y;}
cnumn[2]={1,3,2,7};
最后,请针对你考虑到的意外情况,说明所采用的避免、解决或恢复方案。
2、一条1百万节点的单向链表,链表所有节点是按value字段从小到大的顺序链接;下面是一个节点的结构
typedef struct node_t{
int value; /*节点排序字段*/
int group; /*组号: 0,1,2,3,4,5,6,7,8,9 */
{int a;float b;}stutype;
A. struct是结构体类型的关键字B. struct stu是用户定义的结构体类型
C. stutype是用户定义的结构体类型名D. a和b都是结构体成员名
3、以下对结构体变量stu1中成员age的合法引用是()
#include<string.h>
struct student
typedef struct {
int cmd_no; //该命令的命令号,唯一识别一个命令
int version; //产生该命令的程序的版本
int detail_len; //变产内容的实际长度
char *content; //指向变长内容的指针

} command_head_t;
发送者根据命令号将这些命令分别发送给接收者去处理,例如:发送者产生c1,c2,c3,c4命令,并设定将c1,c2命令发送到接收者r1和r2,将c2、c3,c4命令发送到r3。
{ int year , month , day ;
char week[5];
}
则执行printf(“%d\n”,sizeof(struct date))的输出结果为( )。
A .12 B.17 C.18 D.20
7、设有以下语句:
struct st
{ int n ;
char name[10]
} ;
struct st a[3]={ 5 ,“li”, 7 ,“wang”, 9 ,”zhao”} , *p ;
p= a;
则以下表达式的值为6的是( )。
A. p++ ->n B. p->n++ C. (*p) . n++ D. ++p ->n
8、设有以下语句,则输出结果是( )。
struct List
12、线性表采用链式存储结构时,要求内存中可用存储单元的地址(D)。
A、必须是连续的B、部分地址必须是连续的
C、一定是不连续的D、连续或不连续都可以。
13、在一个单链表中,若在P所指结点之后插入S所指结点,则执行( )。
A、s->next=p;p->next=s;B、s->next=p->next;p->next=s;
1. D 2. C 3. C 4. C 5. D 6. D 7.D 8.A 9.D 10.D
11. D 12.D 13.B 14. C 15. C 16.B
C、s->next=p->next;p=s;D、p->next=s;s->next=p;
14、在一个单链表中,已知q是p的前趋结点,若q和p之间插入结点s,则执行( )。[9.7链表]
A、s-next=p->next;p->next=s;B、p->next=s->next;s->next=p;
C、q->next=s;s->next=p;D、p->next=s;s->next=q;
StructStudent{
char name[8];
int score;}
void main()
{
int max,min,i,j, num;
StructStudentstud[]={"李平",92,"王兵",72,"钟虎",83,"孙逊",60,"徐军",88};
for(i=1;i<num;i++)
Long num ;
{ struct student *p1 , *p2;
if ( head==NULL )
{ printf (“\nlist NULL ! \n”) ;
goto end ;
}
p2=head ;
while ((num != p2 -> num )&&( _________[1]_________ ) )
{
if()
max=i;
else
if(stud[i].score<stud[min].score)
}
}
2、下面程序实现的功能是在已定义的的考生链表中删除指定考生号的结点。请按照程序功能填空。
Struct student *delete ( head , num ) ;
Struct student *head ;
}
else printf (“%ld not found !\n“, num ) ;
end :
return (head );
}
三、选作题目
1、建立双向循环链表并实现基本操作。
2、设计函数解决学生链表中名字重复问题,当新增加学生节点时,若有重名则在后面加后缀,如王洋A、王洋B。
四、思考题
1.设想网络上的一个发送者和64个接收者,发送者每秒有不超过128条的命令产生,每条命令包含一个512字节的头部command_head_t和至多4K字节的变长内容。command_head_t的结构如下:
5、以下程序运行的结果是( )。
#include”stdio.h”
main()
{ struct date
{ int year , month , day ;
} today ;
printf(“%d\n”,sizeof(struct date));
}
A .6B.8C.10D.12
6、对于时间结构体
struct date
{ p1=p2 ; p2= p2 ->next ; }
if ( num== p2 ->nuhead=p2 ->next ;
else ________[2]___________ ;
printf (“delete : % ld\n”, num );
________[3]___________
{ int data ;
struct List *next;};
struct List a[3]={1,&a[1],2,&a[2],3,&a[0]}, * p;
p=&a[1] ;
printf("%d\n",--p->data);
printf("%d\n",p->next->data);
printf("%d\n",p--->data);
{
int age;
int num;
}stu1,*p;
p=&stu1;
A)stu1->ageB)student.ageC)p->ageD)p.age
4、有如下定义:
Struct date
{
int year,month,day;
};
Struct worklist
{
Char name[20];
Char sex;
Struct date birthday;
}person;
对结构体变量person的出生年份进行赋值时,下面正确的赋值语句是( )。
Aworklist.birthday.year=1978B birthday.year=1978
C person.birthday.year=1958D person.year=1958
一、选择题
1、在说明一个结构体变量时系统分配给它的存储空间是().
A)该结构体中第一个成员所需的存储空间
B)该结构体中最后一个成员所需的存储空间
C)该结构体中占用最大存储空间的成员所需的存储空间
D)该结构体中所有成员所需存储空间的总和。
2.设有以下说明语句,则以下叙述不正确的是()
struct stu
}
A. 1 3 1B.3 11 C. 1 3 2 D. 2 1 3
9、若有以下语句,则下面表达式的值为1002的是( )。
struct student
{ int age ;
int num ;
} ;
struct student stu[3]={{1001,20} , {1002,19} , {1003,21}} ;
cnum[0].y/cnum[0].x*cnum[1].x;
A.0B.1C.3D.6
11、若对员工数组进行排序,下面函数声明最合理的为()。
A.void sort( struct Emplyee ); B.void sort( struct Emplyee*);
C.void sort( struct Emplyee[ ]); D.void sort( struct Emplyee*[]);
15、设有定义"enum term { my,your=4,his,her=his+10};",则输出是( )
相关文档
最新文档