课程:C语言程序设计 学号: 姓名: 班级:
实验10-1 链表初步
【知识点回顾】
1. 一
1)
【典型例题】
1. 例题1, 2. 例题2,
//exp2
3. 例题3,
//exp3
【Q&A】
1. Q:宏NULL表示什么?
A:NULL实际是表示0.当指针为0时,会要求编译器把它看成是空指针而不是整数0.提供宏NULL只是为了避免混乱。赋值表达式p=NULL;用于明确地说明p是空指针。 2. Q:既然0用于表示空指针,那么空指针就是字节中各位都为0的地址,对吗??
A:不一定。每个C语言编译器都被允许用不同的方式来表示空指针,而且不是所有编译器都使用零地址的。一些编译器为空指针使用不存在的内存地址。硬件会检查出这种试图通过空指针访问内存的方式。我们不必关心如何在计算机内存储空指针。这是编译器专家关注的细节。重要的是,当在指针环境中使用0时,编译器会把它转换为适当的内部形式。 3. Q:强制类型转换malloc或者其他内存分配函数的返回值,有无必要?
A:强制类型转换这些函数返回的值类型,是经典C延留下来的习惯,源于经典C中,内存分配函数返回char*类型的值,用强制类型转换实现是必要的。而标准C却不是必需的,因为void *型指针会在复制操作时自动转换为任何指针类型。
【实验内容】
1. 请编写一个函数void wndProc(char*msg),要求在给定字符串作为实际参数时,此函
数搜索下列所示的结构数组,寻找匹配的命令名,然后调用和匹配名称相关的函数。
struct {
char *cmd_name;
void (*cmd_pointer)(void); }file_cmd[]=
1
课程:C语言程序设计 学号: 姓名: 班级:
{ };
{\{\{\{\
new_cmd}, open_cmd}, close_cmd}, save_cmd}, save_as_cmd}, print_cmd},
{\{\ {\{\
{\save_all_cmd},
exit_cmd},
2. 设计程序,动态创建(堆式创建)不带有头结点的包含10个结点的单链表,该链表结点由整型数据域和指针域构成,键盘输入整型数据,依次为1,2,3,4,5,6,7,8,9,10:
1) 采用头插法创建单链表: 2) 采用尾插法创建单链表: 3. 已知head指向一个不带有头结点的单链表,链表中每个结点包含数据域和指针域,以下
程序片断求出链表所有结点中,数据域最大的结点的位置,由指针变量s传回主调函数,请完成程序设计。 4. 针对Lab9-2中实验内容1,某航空公司的座位预定程序设计,要求改动如下:
1) 创建一个不带头结点的单链表,每个结点要包括一个用于标识座位的编号、一个标
识座位是否已分配出去的标记、座位预订人的姓、座位预订人的名、以及指向下个结点的指针域。
2) 尝试输出链表中的结点信息
【课后练习】
1. 选择题:
1) 有以下结构体类型定义及变量声明,且如下图所示,指针p指向变量a,指针q指
向变量b,则不能把结点b连接到结点a之后的语句是 。
struct {
char data;
struct node * next; }a, b, *p = &a, *q = &b;
A.a.next = q; B.p.next = &b; C.p->next = &b; D.(*p).next = q;
2) 若以建立下图中的链表结构,指针p、q分别指向图中所示结点,则不能将q所指的
结点插入到链表末尾的一组语句是: 。
2
课程:C语言程序设计 学号: 姓名: 班级:
A. q->next = NULL; p = p->next; p->next = q; B. p = p->next; q->next = p->next; p->next = q; C. p = p->next; q->next = p; p->next = q;
D. p = (*p).next; (*q).next = (*p).next; (*p).next = q;
2. 填空题:
1) 链表有一个“头指针”变量,专门用来存放 。
2) 常常用结构体变量作为链表中的结点,单链表中,每个结点都包括两部分:一个
是 ,用来存放 ,一个是 , 用来存放 。
3) 单链表中,最后一个节点的指针域常常设置为 ,表示链表到此结束。 4) 为建立如图所示的结点存储结构,请将定义补充完整
struct node {
char data;//数据域
;//指针域 }v1;
5) 若要利用下面的程序片断使指针变量p指向一个存储整型数据的变量空间,则应填
入什么内容? int *p;
p= malloc (sizeof(int));
6) 以下程序采用栈式创建(所谓的“静态创建”)一个有2个学生数据的链表,并输出
各结点中的数据,请填空完成下列程序设计。
3
课程:C语言程序设计 学号: 姓名: 班级:
3. 以下程序段的功能是统计链表中结点的个数,其中first为指向第一个结点的指针(链表
不带有头结点)。请填空完成程序设计
4. 已知head指向一个不带头结点的单链表,连表中的每个结点包含数据域和指针域,以下函数求出链表中所有结点数据域的和值,作为函数值返回,请填空完成程序设计。
4
课程:C语言程序设计 学号: 姓名: 班级:
5
相关推荐: