- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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; } 三、线性链表——单链表的应用(1) 程序功能:首先创建一个升序排序的有序链表,创建完毕后遍历整个链表,查看是否按照升序输出,最后销毁链表。 void CreateSortedLinklist(void) { LINKLIST L; NODEPTR p,q; elemtype e; InitLinklist(L); /*初始化链表L*/ 三、线性链表——单链表的应用(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; } 三、线性链表——单链表的应用(3) TraverseLinklist(L); /*遍历输出链表L*/ printf(\n); DestroyLinklist(L); /*销毁链表L*/ } 三、线性链表——双向链表数据类型定义 typedef struct node_tag { elemtype data; struct node_tag *next, *prior;/*next指向后继,prior指向前驱*/ }DBNODE, *DBNODEPTR, *DBLINKLIST; 三、线性链表——双向链表的操作(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结点内存*/ } 三、线性链表——双向链表的操作(2) 2.将数据元素插入到双向链表中结点p的后面 int InsertElemAfter(DBNODEPTR p, elemtype e) {/*将数据元素e插入到某双向链表中结点p的后面*/ DBNODEPTR q; q=(DBNODEPTR)malloc(sizeof(DBNODE));/*分配结点*/ if(q==NULL)return 0; q-data=e; q-next=p-next;/*①*/ q-prior=p; /*②*/ if(p-next!=NULL) p-next-prior=q;/*③*/ p-next=q; /*④*/ return 1; } 三、线性链表——循环链表 四、线性链表的应用案例(1) 任务:编程完成两个多项式的相加。比如输入的多项式是“15X5+6X3-3X2+1”和“9X4-4X3+3X2+5”,相加的结果是“15X5+9X4+2X3+6”。 程序清单: typedef struct {float coef; int exp; } elemtype; typedef struct node_tag {elemtype data; struct node_tag *next; }NODE, *NODEPTR, *LINKLIST; 四、线性链表的应用案例(2) void TraverseLinklist(LI
您可能关注的文档
- 第三节病毒与实践.ppt
- 第三讲代词.ppt
- 第三节线性变换的矩阵.ppt
- 第三节土地经济学的对象与研究方法.ppt
- 第三章麦芽制造.ppt
- 第三部分判断推理.doc
- 第三课多彩的消费.ppt
- 第三部分工业产品生产许可证核查人员-常州市质监局.doc
- 第三讲.ppt.ppt
- 第九届-上海市房地产行业协会.doc
- 2025四川南充市公路管理局南充市水务局遴选3人笔试备考题库附答案解析.docx
- 2025年清水河县事业单位联考招聘考试历年真题完美版.docx
- 2025年正安县事业单位联考招聘考试历年真题完美版.docx
- 2025年金沙县事业单位联考招聘考试真题汇编新版.docx
- 2025年乐业县辅警招聘考试真题汇编及答案1套.docx
- 2025年新龙县事业单位联考招聘考试历年真题附答案.docx
- 2025年淮阳县事业单位联考招聘考试历年真题含答案.docx
- 2025年紫金县事业单位联考招聘考试真题汇编含答案.docx
- 2025年永福县事业单位联考招聘考试历年真题推荐.docx
- 2025年睢县事业单位联考招聘考试历年真题含答案.docx
原创力文档


文档评论(0)