数据结构(叶核亚)第02篇 线性表.pptVIP

  • 1
  • 0
  • 约2.64千字
  • 约 25页
  • 2017-06-07 发布于湖北
  • 举报
叶核亚 第2章 线性表 2.1 线性表的抽象数据类型 2.2 线性表的顺序表示和实现 2.3 线性表的链式表示和实现 目的:实现线性表抽象数据类型。 要求:掌握两种存储结构实现线性表。 重点:顺序表类,单链表类。 难点:单链表,双链表。 2.1 线性表的抽象数据类型 LinearList=(a0,a1,…,an-1) public interface LListE //线性表接口 { boolean isEmpty(); //判断线性表是否为空 int length(); //返回线性表长度 E get(int index); //返回序号为index的对象 E set(int index, E element);//设置序号为index对象为 boolean add(int index, E element); // 在index处插入element对象 boolean add(E element); //在顺序表最后插入element对象 E remove(int index); //移去序号为index的对象并返回 void clear(); //清空线性表 } 2.2 线性表的顺序表示和实现 线性表的顺序存储结构 2. 顺序表的插入和删除操作 3. 顺序表类 public class SeqListE implements LListE { //顺序表类,实现线性表接口 private Object[] table; //对象数组,私有成员 private int n; //顺序表长度 } 顺序表操作的效率分析 如果在各位置插入元素的概率相同,则有 【例2.1】 使用顺序表类求解约瑟夫环问题。 2.3 线性表的链式表示和实现 2.3.1 线性表的链式存储结构 2.3.2 单链表 2.3.3 双链表 2.3.1 线性表的链式存储结构 2.3.2 单链表 单链表结点类 public class NodeE { //单链表结点类 public E data; //数据域,保存数据元素 public NodeE next; //地址域,引用后继结点 } NodeString p,q; p=new NodeString(A); q=new NodeString(B); p.next=q; 2. 单链表的遍历操作 NodeE p = head; while (p!=null) { 访问p结点; p = p.next; } 3. 单链表的插入操作 4. 单链表的删除操作 头删除 head = head.next; 中间/尾删除 if (p.next!=null) p.next = p.next.next; 5. 单链表类 public class SinglyLinkedListE implements LListE { //单链表类,实现线性表接口 protected NodeE head; //头指针 public SinglyLinkedList() { //构造空单链表 this.head = null; } }(P59) 单链表操作的效率分析 【例2.2】 采用单链表求解约瑟夫环问题。 7. 单链表是递归结构 public String toString() { return ( + this.toString(this.head) + ); } public String toString(NodeE p) { //递归算法 if (p!=null) return p.data.toString() + , + this.toString(p.next); return ; } 【例2.3】 单链表逆转。 8. 带头结点的单链表 【例2.4】 建立排序的单链表。 9. 循环单链表 2.3.3 双链表 双链表结

文档评论(0)

1亿VIP精品文档

相关文档