- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
知识点线性表的链式表示与实现
2.3 线性表的链式表示和实现 2.3.3 双向链表 双向链表结点定义为: typedef struct DuLNode{ ElemType data; //数据域 struct DuLNode *prior; //指向前驱元素的指针 struct DuLNode *next;//指向后继元素的指针 } DuLNode ,*DuLinkList; 3、双向链表的操作-1 3、双向链表的操作-2 3、双向链表的操作-3 3、双向链表的操作-4 3、双向链表的操作-5 2.4 一元多项式的表示及相加 第二章 内 容 结 束 void purge(List La, List Lb) { InitList(LA); La_len = ListLength(La); Lb_len =ListLength(Lb); for (i = 1; i = Lb_len; i++) { GetElem(Lb, i, e); if (ListEmpty(La) || !equal (en, e)) { ListInsert(La, ++La_len, e); en = e; } }//for } // purge 控制结构: 基本操作: for 循环 ListInsert 当以顺序映像实现抽象数据类型线性表时为: O( ListLength(Lb) ) 当以链式映像实现抽象数据类型线性表时为: O( ListLength2(Lb) ) 算法时间复杂度 void MergeList(List La, List Lb, List Lc) { InitList(Lc); i = j = 1; k = 0; La_len = ListLength(La); Lb_len = ListLength(Lb); while ((i = La_len) (j = Lb_len)) { GetElem(La, i, ai); GetElem(Lb, j, bj); if (ai = bj) { ListInsert(Lc, ++k, ai); ++i; } else { ListInsert(Lc, ++k, bj); ++j; } } … … 控制结构: 基本操作: 三个并列的while循环 ListInsert 当以顺序映像实现抽象数据类型线性表时为: O( ListLength(La)+ListLength(Lb) ) 当以链式映像实现抽象数据类型线性表时为: O( ListLength 2(La)+ListLength 2(Lb) ) 算法时间复杂度 1.单链表的表长是一个隐含值. 2.在单链表的最后一个元素最后插入元素时,需遍历整个链表. 3.在链表中,元素的”位序”概念淡化,结点的”位置”概念强化. 在线性表中实现单链表的操作时,存在的问题: 改进链表的设置: 1.增加“表长”,“表尾指针”和“当前位置的指针”三个数据域; 2.基本操作由位序改为指针(使得有的操作的时间复杂度尽量降低) 6、一个带头结点的线性链表类型 Typedef struct LNode{ //结点类型 ElemType data; Struct LNode *next } *Link , *Position Status MakeNode(Link p,ElemType e)//分配结点空间 //分配由 p指向的值e的结点,并返回OK; //若分配失败,则返回ERROR void FreeNode(Link p); //释放p所指的结点 typedef struct {//链表类型 link head ,tail; //指向头结点和最后一个结点 int len; //指示链表的长度 Link current //指向当前访问的结点的指针 //初始位置指向头结点 }LinkList; 链表的基本操作: {结构初始化和销毁结构} Status InitList(LinkList L); //构造一个空的链表L, //头指针,尾指针和当前指针均指ElemType e向头结点 //表长为零 Status DestroyList(LinkList L); //销毁线性表L,L不再存在 {引用型操作} Status ListEmpty(LinkList L);//判表空 int ListLength(LinList L);//求表长 Status Prior(LinkList L);/
文档评论(0)