- 11
- 0
- 约2.31万字
- 约 135页
- 2021-11-13 发布于安徽
- 举报
bool deleelem( DLinkList *L, ElemType x ) { DLinkList *p=L-next; while ( p!=L p-data!=x ) p=p-next; if (p!=L) // p指着值为x的结点, 下面删除*p结点 { p-next-prior=p-prior; p-prior-next=p-next; free(p); return true; } else return false; } void Sort(LinkList *L) { LinkList *pre, *p, *q; if (L-next==NULL) return; /* 若单链表L空,结束*/ p=L-next-next; // p指向第2个结点 L-next-next = NULL; // 构造只有1个结点的单链表 while ( p!=NULL ) { q=p-next; // q保存*p结点后继结点的指针 pre=L; while (pre-next!=NULL pre-next-datap-data) pre=pre-next; //在有序表中找插入*p的前驱结点*pre p-next=pre-next; // 将*p插入到*pre之后 pre-next=p; p=q; // 扫描原单链表余下的结点 } } 2.3.3 双链表 对于双链表,采用类似于单链表的类型定义,其DLinkList类型的定义如下: typedef struct DNode /*定义双链表结点类型*/ { ElemType data; struct DNode *prior; /*指向前驱结点*/ struct DNode *next; /*指向后继结点*/ } DLinkList; 头插法建立双链表与头插法建立单链表类似: void CreateListF(DLinkList *L, ElemType a[ ], int n) { DLinkList *s;int i; L=(DLinkList*)malloc(sizeof(DLinkList));//L=new DLinkList; /*创建头结点*/ L-next=NULL; L-prior=NULL; for (i=0;in;i++) { s=(DLinkList *)malloc(sizeof(DLinkList)); /*创建新结点*/ s-data=a[i]; s-next=L-next; /*将*s插在原开始结点之前,头结点之后*/ if (L-next!=NULL ) L-next-prior=s; L-next=s; s-prior=L; } } 在双链表中,有些操作如求长度、取元素值和查找元素等操作算法与单链表中相应算法是相同的,这里不多讨论。但在单链表中,进行结点插入和删除时涉及到前后结点的一个指针域的变化。而在双链表中,结点的插入和删除操作涉及到前后结点的两个指针域的变化。 双链表中插入结点示意图 归纳起来,在双链表中p所指的结点之后插入一个*s结点。其操作语句描述为: s-next=p-next; /*将*s插入到*p之后*/ if (p-next != NULL ) // 若*p结点有后继结点 p-next-prior=s; // 则*p结点的后继结点往前指 s-prior=p;
您可能关注的文档
最近下载
- VDGP201_2002-05-01_VolumendefizitevonGutkenausNichteisenmetallen(中文).doc VIP
- 部编版道德与法治一年级下册第2课《做事要仔细》精美课件.pptx VIP
- 《新污染物治理技术》-课件全套 第1--13章 新污染物简介--- 人工智能与新污染物控制.pdf VIP
- 提高学习效率的六大诀窍五大方法.docx
- 2025年江苏省盐城市中考地理试卷及答案.docx VIP
- 化工制图习题集答案(20201030132317).pdf VIP
- DLT5427-2022年火力发电厂初步设计内容深度规定.doc
- 2025微博娱乐白皮书.docx VIP
- DL-T5153-2024火力发电厂厂用电设计技术规程.pptx VIP
- 体育教学论第4章.ppt VIP
原创力文档

文档评论(0)