- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* 链 表 10 用数组来存储数据,有存取效率高,方便等特点。但是,数组的元素个数不能动态扩充,大小固定,不适用于数据元素个数动态增长的数据。在数组中进行数组元素的插入与删除,需要移动其它数据元素,从而保持数组中数据元素的相对次序不变,这就造成了数组中数据的插入与删除的效率很低。而链表适用于数据元素频繁的插入与删除,其存储空间可以动态增长。 10.1 链表概述 1.单链表的结构 (1)单链表中构成链表的结点只有一个指向直接后继结点的指针域。其结构特点:逻辑上相邻的数据元素在物理上不一定相邻。数据域:存储元素数值数据,指针域:存储直接后继的存储位置。 (2)头指针、头结点 头指针是指向链表中第一个结点(或为头结点、或为首元结点)的指针; 头结点是在链表的首元结点之前附设的一个结点;数据域内只放空表标志和表长等信息,它不计入表长度。 10.2 链表类 template class T class LinList; template class T class ListNode { friend class LinList T; private: ListNode T *next; T data; public: ListNode(ListNodeT *ptrNext=NULL) {next=ptrNext;} ListNode(const T item,ListNodeT *ptrNext=NULL) {data=item;next=ptrNext;}? ~ListNode(void){} }; 2.结点类的定义和实现 单链表类的定义: template class T class LinList { private: ListNode T *head; //头指针 int size; //当前的数据元素个数 ListNode T *Index(int i); //定位 public: LinList(void); //构造函数 ~LinList(void); //析构函数 int Size(void) const; //取当前数据元素 void Insert(const T item,int i); //插入 T Delete(int i); //删除 T GetData(int i); //取数据元素 }; 3.单链表类的定义和实现 所设计的单链表带头结点,所以构造函数要用new运算符动态申请一个头结点并由头指针指示,初始时当前数据元素个数为0,程序如下: template class T LinList T::LinList() //构造函数 { head=new ListNode T(); //头指针指向头结点 size=0; //size的初值为0 } 单链表所有结点都是用动态内存分配方法分配的内存空间,所以析构函数要完成单链表中所有结点内存空间的释放。实现方法如图示: 单链表类的实现 单链表类的实现 单链表类的实现 单链表类的实现 循环单链表是单链表的另一种形式,其结构特点是链表中最后一个结点的指针域指向整个链表的第一个结点,从而使链表形成一个环。它的优点是从链尾到链头比较方便。循环单链表也有带头结点和不带头结点两种结构。一个带头结点的循环单链表如下图示: 4.循环单链表 双向链表是每个结点除后继指针域外还有一个前驱指针域,它有带头结点和不带头结点,循环和非循环结构,双向链表是解决查找前驱结点问题的有效途径。结构如图所示: 5.双向链表 循环双向链表的插入过程 循环双向链表的删除过程 5.双向链表 实现顺序存储结构的方法是使用数组。数组把线性表的数据元素存储在一块连续地址空间的内存单元中,这样线性表中逻辑上相邻的数据元素在物理存储地址上也相邻。数据元素间的逻辑上的前驱、后继逻辑关系就表现在数据元素的存储单元的物理前后位置上。顺序表一般采用静态数组方法实现
您可能关注的文档
- C#程序设计 刘克成 张凌晓 Ch10新.ppt
- C#程序设计 刘克成 张凌晓 Ch12新.ppt
- C#程序设计案例教程 周庞荣 易斌 第1章 编程逻辑新.ppt
- C#程序设计案例教程 周庞荣 易斌 第2章 Visual C#概述新.ppt
- C#程序设计案例教程 周庞荣 易斌 第3章 常量和变量新.ppt
- C#程序设计案例教程 周庞荣 易斌 第4章 运算符与表达式新.ppt
- C#程序设计案例教程 周庞荣 易斌 第5章 程序控制语句新.ppt
- C#程序设计案例教程 周庞荣 易斌 第7章 函数新.ppt
- C#程序设计案例教程 周庞荣 易斌 第8章 面象对象程序设计基础新.ppt
- C#程序设计案例教程 周庞荣 易斌 第9章 继承新.ppt
文档评论(0)