数据结构(线性表)【荐】.pptVIP

  • 18
  • 0
  • 约2.83万字
  • 约 130页
  • 2015-07-24 发布于河南
  • 举报
数据结构(线性表)【荐】.ppt

中山大学 本 章 难 点 链表是本章的重点和难点。扎实的指针操作和内存动态分配的编程技术是学好本章的基本要求,分清链表中指针 p 和结点 *p 之间的对应关系,区分链表中的头结点、头指针和首元结点的不同所指以及循环链表、双向链表的特点等。 中山大学 描述以下三个概念的区别: 头指针,头结点,首元结点(第一个元素结点)。 2. 简述线性表的两种存储结构顺序表和链表的优缺点。 3. 在顺序表中插入和删除一个结点需平均移动多少个结点?具体的移动次数取决于哪两个因素? 分别用顺序表和单链表作为存储结构,实现线性表(a0,a1,…,an-1)就地逆置的操作。 用单链表实现两个集合的差。 本 章 作 业 参考书籍(一) D. E. Knuth, the art of computer programming volume; volume 3, in c 1973 算法+程序=数据结构  沃思著 科学出版社 数据结构(用面向对象方法与C++描述) 殷人昆 清华大学出版社 1999 数据结构题集(C语言版) 严蔚敏 2001-11 清华大学出版社 耿国华等编著,《数据结构—C语言描述》。 数据结构学习指导与典型题解,朱战立 2002-3-1 西安交通大学出版社 中山大学 参考书籍(二) 数据结构与程序设计C语言描述 (第2版)(Data Structure Program Design in C) Robert L.Kruse 2001-9 清华大学出版社 数据结构及应用算法教程(配软盘) 严蔚敏 陈文博 2001-8 清华大学出版社 C语言与数据结构 孙经钰 2001-7-1 北京航空航天大学出版社 数据结构(C语言篇)——习题与解析(修订版) 李春葆 2002-4 清华大学出版社 C/C++与数据结构 王立柱 编著 2002-3 清华大学出版社 中山大学 中山大学 双向链表的删除操作 设p指向双向链表中某结点,删除*p。 操作如下: ①p-prior-next=p-next; ②p-next-prior=p-prior; ③free(p); 中山大学  void ListDelete_DuL(DuLinkList L, int i, ElemType e)  {  // 删除带头结点的双向循环链表L的第i个元素,i的合法值为1 = i = 表长  // 并以 e 返回它的数据元素   if(! (p = GetElemP_DuL(L,i))) //在L中确定第i个元素的位置指针p return ERROR; // p=NULL,即第i个元素不存在 e = p-data; p-prior-next = p-next;   p-next-prior = p -prior;   delete q; return OK;  } // ListDelete_DuL 双向链表的删除操作 中山大学 例:设一个循环双链表L=(a,b,c,d)编写一个算法将链表转换为L=(b,a,c,d)。 算法思想:本题实际上是交换表中前两个元素的次序。 双向链表的应用举例 中山大学 void swap(DLinkList L) { ??DNode ?* p,*q,*h; ? h=L-next;?? ????????? /* h指向表中的第一个结点,即a */ ? p=h-next;?? ????????? /* p指向b结点 */ ? q=h-prior;?? ?? /* 保存a 结点的前驱 */ ? h-next=p-next;? /* a结点的后继指向c结点 */ ? p-next-prior=h; /* c结点的前驱指向a结点 */ ? p-prior=q;?? ?? /* 将b结点插入,作为表的第一个结点 */ ? p-next=h; ? h-prior=p; ? L-next=p;????? /* 将表的头结点的next 域指向b结点 */ } 双向链表的应用举例 中山大学 线性表的链式存储结构--静态链表 以上介绍的各种链表都是由指针实现的,链表中结点空间的分配和回收(即释放)都是由系统提供的标准函数malloc和free动态实现的,故称之为动态链表。但是有的高级语言,如BASIC、FORTRAN等,没有提供“指针”这种数据类型,此时若仍想采用链表作存储结构,就必须使用“游标(Cursor)”来模拟指针,由程序员自己编写“分配结点”和“回收结点”的过程。???????????????? 中山大学 线性表的链式存储结构--静态链表 基本概念:定义一个较大的结构

文档评论(0)

1亿VIP精品文档

相关文档