杨开成_数结构(C语言)_chapt02.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
三、线性链表——单链表基本操作(9) 9.删除某个特定数据元素(O(1)) int DeleteElem(LINKLIST L, elemtype e) {/*将链表L中数据域是e的结点删除掉*/ NODEPTR p,pre; p=SearchLinklist(L,e,pre); /*查找数据域是e的结点及其前驱,返回结点指针*/ if(p==NULL) return 0;/*操作失败,没有找到*/ pre-next=p-next; /*摘除结点p*/ free(p); /*释放结点p*/ return 1; } 存宰酣遏藤活讯葫苹绚芦雇探辙睹狭碴滁晤啪釜哲话请你氮啼毗氖饮缎土杨开成_数据结构(C语言)_chapt02杨开成_数据结构(C语言)_chapt02 三、线性链表——单链表的应用(1) 程序功能:首先创建一个升序排序的有序链表,创建完毕后遍历整个链表,查看是否按照升序输出,最后销毁链表。 void CreateSortedLinklist(void) { LINKLIST L; NODEPTR p,q; elemtype e; InitLinklist(L); /*初始化链表L*/ 轩违到锋鸵涯顿吩汰凳贯闪躬戮重垛矩欣烙傻排静盈婿咕耿炯船既啸疡袭杨开成_数据结构(C语言)_chapt02杨开成_数据结构(C语言)_chapt02 三、线性链表——单链表的应用(2) while(1) {/*接受多次输入,将输入的数据按照升序序列插入链表L中,输入0表示终止*/ scanf(%d,e);/*假定elemtype是指int型*/ if(e==0)break; /*终止输入*/ p=(NODEPTR)malloc(sizeof(NODE));/*为e分配结点*/ p-data=e; q=L;/*q指向L的头结点*/ /*下面的while语句在寻找第一个比e大的结点,将e插入到它的前面*/ while(q-next!=NULLeq-next-data) q=q-next; /*如果q-next是结点并且它的数据域比e小,q就向后移动一个单元*/ /*这时,q-next要么是NULL,要么q-next的数据域大于等于e。 无论哪种情况,p都应该插入到q的后面*/ p-next=q-next;/*这两步操作读者应该很熟悉了*/ q-next=p; } 井白像蛋明择妓漏徽草疆姬免饼唾苦鹊戌捣蹬定潘扛旭帚魏袭械轩敞寻留杨开成_数据结构(C语言)_chapt02杨开成_数据结构(C语言)_chapt02 三、线性链表——单链表的应用(3) TraverseLinklist(L); /*遍历输出链表L*/ printf(\n); DestroyLinklist(L); /*销毁链表L*/ } 欧躬摄芝拎鹿闰朔颖挨勋犹蕾沾钉啤瘦援般构五勋试腮桂忿镀踩娟耍午优杨开成_数据结构(C语言)_chapt02杨开成_数据结构(C语言)_chapt02 三、线性链表——双向链表数据类型定义 typedef struct node_tag { elemtype data; struct node_tag *next, *prior;/*next指向后继,prior指向前驱*/ }DBNODE, *DBNODEPTR, *DBLINKLIST; 刺塞衷贡甄猾洪像座纸氧压窍系俺谩阉壮蛰走龋唐殆蹲钻标县诺攘舅微剁杨开成_数据结构(C语言)_chapt02杨开成_数据结构(C语言)_chapt02 三、线性链表——双向链表的操作(1) 1.删除双向链表中的某个结点 void DeleteElem(DBNODEPTR p) {/*p是某双向链表中的结点,将p从链表中摘除并释放结点内存*/ DBNODEPTR pre; pre=p-prior; /*pre指向p的前驱*/ if(pre!=NULL) pre-next=p-next; /*①*/ if(p-next!=NULL) p-next-prior=pre; /*②*/ free(p);/*释放p结点内存*/ } 汉喉县粤追祟匪缔酱钩躲阜蚤琴河众饮叼世星遭弦凿北镐从消窃保浴熬蔡杨开成_数据结构(C语言)_chapt02杨开成_数据结构(C语言)_chapt02 三、线性链表——双向链表的操作(2) 2.将数据元素插入到双向链表中结点p的后面 int InsertElemAfter(DBNODEPTR p, elemtype e) {/*将数据元素e插入到某双向链表中结点p的后面*/ DBNODEPTR q; q=(DBNODEPTR)malloc(sizeof(DBNODE));/*分配结点*/

文档评论(0)

dmdt5055 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档