C_lab10-1_链表初步.docVIP

  • 46
  • 0
  • 约2.42千字
  • 约 5页
  • 2017-03-05 发布于重庆
  • 举报
C_lab10-1_链表初步

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

文档评论(0)

1亿VIP精品文档

相关文档