- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
链式存储结构的表、堆栈和队列 4.1 链式存储结构 4.2 单链表 4.3 单循环链表 4.4 双向循环链表 4.5 链式堆栈 4.6 链式队列 4.7 链式存储结构的特点 4.8 应用问题的面向对象程序设计方法 4.1 链式存储结构 链式存储结构:初始时为空链,每当有新的数据元素需要存储时,用户向系统动态申请所需的存储空间插入链中。 申请: 名字指针=new 类型明(初始化值) 释放: Delete 名字指针 4.1 链式存储结构 特点:任意两个在逻辑上相邻的数据元素在物理上不一定相邻。其逻辑顺序是通过链中的指针来实现的。 为了能正确表示结点间的逻辑关系,在存储每个结点值的同时,还必须存储指示其后继结点的地址(或位置)信息,这个信息称为指针(pointer)或链(link)。 4.1 链式存储结构 链式存储结构数据元素集合的方法是用结点(Node)构造链。 4.1 链式存储结构 头结点是指头指针所指的不存放数据元素的结点。 其中,带头结点的链式结构在表的存储中更为常见。不带头结点的链式结构在栈和队列的存储中更为常见。 空指针在算法描述中用NULL来表示,空指针是一个特殊的标识,用来表识链的结束。 4.2 单链表(Single Linked) 链表正是通过每个结点的链域将线性表的n个结点按其逻辑次序链接在一起的。由于上述链表的每一个结点只有一个链域,故将这种链表称为单链表(Single Linked)。 例1、线性表:(bat,cat,eat,fat,hat,jat,lat,mat) 单链表 (Singly Linked List) 特点 每个元素(表项)由结点(Node)构成。 线性结构 结点可以不连续存储 表可扩充 由图分析:单链表的基本组成部分是结点,一个单链表可用该单链表的头指针来表示。(用类的组合来实现) 先设计结点类 定义单链表类 4.2.1 结点类的定义和实现 数据成员:数据域data(公有,应用问题要使用) 指针域next(私有) private: ListNodeT *next; //该指针是结点类的对象 成员函数: 初始化构造一个结点对象(头结点) 新建立一个结点,(指向下一个结点的指针) 4.2.1 结点类的定义和实现 #includeiostream.h #includestdio.h templateclass Tclass LinList; //前视定义,否 则,无法定义友元 templateclass Tclass ListNode { friend class LinListT; //定义友元 private: ListNodeT *next; //指向下一个结点的指针 public: … } 4.2.1 结点类的定义和实现 { … public: T data; //定义公有成员便于访问 ListNode(ListNodeT *ptrNext = NULL); //构造函数,用于构造头结点 ListNode(const T item,ListNodeT *ptrNext = NULL); //构造函数,非头结点 ~ListNode(){}; //析构函数 } 4.2.1 结点类的定义和实现 templateclass T ListNodeT::ListNode(ListNodeT *ptrNext):next(ptrNext) { } templateclass T ListNodeT::ListNode(const T item,ListNodeT *ptrNext) { data = item; next = ptrNext; } 4.2.2 单链表类的定义和实现 数据成员(1)头指针(2)元素个数(3)当前结点指针 成员函数:3组 (1)构造函数和析构函数 (2)表操作的成员函数(任何对单链表结点的操作都要从头结点开始) (3)遍历函数(为什么要提出?) templateclass Tclass LinList { private: ListNodeT *head; //指向头结点的指针 int size; //单链表的元素个数 ListNodeT *currPtr; //当前结点指针 public: LinList(void); //构造函数 ~LinList(void); //析构函数 … } templateclass Tclass LinList { private: public: … int ListSize(void) const; //返回链表的元素个数 int ListEmpty(void) c
文档评论(0)