《数据结构——线性表单链表》.pptVIP

  • 4
  • 0
  • 约1.25万字
  • 约 62页
  • 2018-05-10 发布于河南
  • 举报
《数据结构——线性表单链表》

线 性 表 * 黑板上画指针变化 * * * * 4. 单链表的模板类 类模板将类的数据成员和成员函数设计得更完整、更灵活。 类模板更易于复用。 在单链表的类模板定义中,增加了表头结点。 * 单链表结点定义 template class T struct LinkNode { T data; LinkNodeT *link; LinkNode(LinkNodeT *ptr = NULL) { link = ptr; } LinkNode(const T item, LinkNodeT *ptr = NULL) { data = item; link = ptr; } } * template class T class List { //单链表类定义, 不用继承也可实现 protected: LinkNodeT * first; //表头指针(头结点) public: List() { first = new LinkNodeT; } //构造函数 List(T x) { first = new LinkNodeT(x); } List( ListT L); //复制构造函数 ~List() { makeEmpty(); delete first; } //析构函数 void makeEmpty(); //将链表置为空表 int Length() const; //计算链表的长度 单链表模板类定义 * LinkNodeT *getHead() const { return first; } //返回头结点的地址 LinkNodeT *Search(T x); //搜索含x元素 LinkNodeT *Locate(int i); //定位第i个元素 T *getData(int i, Tx) const; //取出第i元素值 void setData(int i, T x); //更新第i元素值 bool Insert (int i, T x); //在第i元素后插入 bool Remove(int i, T x); //删除第i个元素 单链表模板类定义(续1) * 单链表模板类定义(续2) bool IsEmpty() const //判表空否 { return first-link == NULL ? true : false; } bool IsFull() const { return false; } void Sort(); //排序 void input(); void output(); ListT operator = (ListT L); }; * (1)复制构造函数 template class T ListT::List(ListT L) { T value; LinkNodeT *srcptr = L.first(); LinkNodeT *destptr = first = new LinkNodeT; while (srcptr-link){ value = srcptr-link-data; destptr-link = new LinkNodeT(value); destptr = destptr-link; srcptr = srcptr-link; } destptr-link = NULL; } * (2)链表置空算法(保留表头结点) template class T void ListT::makeEmpty() { LinkNodeT *q; while (first-link != NULL) { q = first-link; //保存被删结点 first-link = q-link; //从链上摘下该结点 delete q; //删除 } } 时间复杂度:Θ (n) * first q first first q q first a0 a1 a1 a2 a2 a2 current * template class T int ListT :: Length ( ) const { ListNodeT *p = first-link; //检测指针 p 指示第一号结点 int count = 0; while (

文档评论(0)

1亿VIP精品文档

相关文档