数据结构 2线性表B.pptVIP

  • 5
  • 0
  • 约7.41千字
  • 约 40页
  • 2017-07-28 发布于浙江
  • 举报
数据结构 2线性表B

上堂课要点回顾 补充:结构类型的C语言表示法 ④ 介绍三个有用的库函数(都在stdlib.h 中): sizeof(x)——计算变量x的长度; malloc(m) —开辟m字节长度的地址空间,并返回这段空间的首地址; free(p) ——释放指针p所指变量的存储空间,即彻底删除一个变量。 第2章 线性表 2.1 线性表的逻辑结构 2.2 线性表的顺序表示和实现 2.3 线性表的链式表示和实现 2.4 应用举例 2.3 线性表的链式表示和实现 2.3.1 链表的表示 链式存储特点 补充:结构数据类型及其C语言表示法 与链式存储有关的术语 2.3.1 链表的表示 例1 画出26 个英文字母表的链式存储结构。 补充:结构类型的C语言表示法 补充:结构数据类型及其C语言表示法 ① 类型定义和变量说明可以合写为: typedef struct Node { //Node是自定义结构类型名称 char data; //定义数据域的变量名及其类型 struct Node *next; //定义指针域的变量名及其类型 }LNode,*LinkList; // LNode是Node结构类型的变量, // *LinkList是指向Node结构类型的指针 至此应可看懂教材P28对于单链表的抽象描述,和 教材P22关于顺序表的抽象定义。 附:教材P22关于顺序表的抽象定义: 3. 与链式存储有关的术语: 4、头指针、头结点和首元结点 示意图如下: 讨论3. 头结点的数据域内装的是什么? 2.3.2 链表的实现 1. 单链表的建立和输出 2. 单链表的修改 3. 单链表的插入 4. 单链表的删除 5. 应用举例 6. 其它链表形式 1. 单链表的建立和输出 实例:用单链表结构来存放26个英文字母组成的线性表(a,b,c,…,z),请写出C语言程序。 例:建立单链表 --头文件及数据结构声明 void main( ) { LinkList head; //头指针head build(head); //建立字母链表 display(head); //输出字母链表 } void build(LinkList head) //字母链表的生成 { int i=26; LinkList pf, p, head; //以下处理过程:结点pf在p的前面 int m=sizeof(LNode); //求每个结点占用几个字节存储空间 head=(LinkList)malloc(m); //头结点 head-next=NULL; pf=head; while( i ) { p=(LNode*)malloc(m); //为新结点开新空间! p-data= 26 - i + ‘a’; // 第一个结点值为字符a p-next=pf-next; pf-next=p; //插入到表尾 pf=p;//移动pf指针到下一位置 i--; } } void display(LinkList head) //字母链表的输出 { LinkList p; p=head-next; //p指向首元结点 while (p) { printf(%c ,p-data); p=p-next; } } 2. 单链表的修改(或读取) 思路:要修改第i个数据元素,关键是要先找到该结点的指针p,然后用p-data=new_value 即可。 3. 单链表的插入 4. 单链表的删除 5.应用举例:两个链表的归并(教材P31) 用链表可表示为: 算法分析: 思考: 2.3.3 链表的运算效率分析 1. 查找 因线性链表只能顺序存取,即在查找时要从头指针找起,查找的时间复杂度为 O(n)。 6. 更多与链式存储有关的术语: 例: 6. 其它链表形式 讨论2: 链表能不能首尾相连?怎样实现? 讨论3: 单链表只能查找结点的直接后继,能不能查找直接前驱?如何实现? 小结 问1:线性表的逻辑结构特点是什么?其顺序存储结构和链式存储结构的特点是什么? 问2:顺序存储和链式存储各有哪些优缺点? 问3:在什么情况下用顺序表比链表好? 作业: 1. 请在下次课前完成第2章自测卷全部内容; 时间效率分析 2. 插入和删除 因线性链表不需要移动元素,只要修改指针,一般情况下时间复杂度为 O(1)。 但是,如果要在单链表中进行前插或删除操作,由于要从头查找前驱结

文档评论(0)

1亿VIP精品文档

相关文档