版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、在链表中删除相同节点1需求分析: 依次比较两个链表元素,取出两个链表相同元素,组成一个新的链表并赋顺序指针struct Node int number; Node *next; Node *p,*q; ;2源代码#include "stdafx.h" #include <iostream> /双向循环链表的操作 using namespace std; typedef struct
2、160;Dbnode int data; /节点数据 Dbnode *left; /前驱结点指针 Dbnode *right; /后继节点指针 Dbnode; void Print(Dbnode *head); /根据
3、数据创建节点 Dbnode *CreateNode(int data) Dbnode *pnode=new Dbnode;/ if (pnode=NULL) /如果内存申请失败,返回NULL return NULL;
4、 pnode->data=data; pnode->left=pnode;/新节点的前驱和后继指针都指向自身 pnode->right=pnode; return pnode; /在表尾插入新节点,返回表头节
5、点 Dbnode *AppendNode(Dbnode *head,int data) if (head=NULL) return NULL; Dbnode *phead=hea
6、d; Dbnode *pnode=CreateNode(data);/创建一个新节点 while (head!=phead->right) /找到表尾 phead=phead->right;
7、60; pnode->right=phead->right;/右连接 head->left=pnode; phead->right=pnode;/左连接 pnode->left=phead; return
8、60;head; /双向循环链表测长 int GetLength(Dbnode *head) if (head=NULL)/如果指针为空则返回0 return 0;
9、160; Dbnode *phead=head->right; int i=1; while (head!=phead) phead=phead->right;&
10、#160; i+; return i; /双向循环链表的节点查找 Dbnode *FindNode(Dbnode *head,int data)&
11、#160; if (head=NULL) return NULL; if (head->data=data) /如果表头节点和值相等
12、; return head; Dbnode *phead=head->right; while (head != phead && phead->data != data)
13、0; phead=phead->right; if (phead->data=data)/如果是值相等退出,则返回节点 return phead;
14、 else /如果没有找到,则返回NULL return NULL; /获得pA链表和pB链的交集,返回一个新链表 Dbnode *GetLink(Dbnode *pA,Dbnod
15、e *pB) if (pA=NULL | pB=NULL)/如果为空,则返回NULL return NULL; Dbnode *pC=NULL;
16、0; Dbnode *node=NULL; Dbnode *phead=NULL; /Dbnode *pheadA=pA; int len_a=GetLength(pA); int len_b=GetLength(pB);
17、160; int data; for (int i=0;i<len_a;i+) phead=pB;
18、; data=pA->data; if (FindNode(pC,data)!=NULL)/如果data已在pC中,则进行下次循环
19、; pA=pA->right; continue; &
20、#160; if (data=pB->data)/如果pB的头节点和data相等 node=new Dbnode;
21、160; node->data=data; node->left=node->right=node; &
22、#160; if (pC=NULL)/如果pC为空,则作为头节点 pC=node;
23、60; pC->left=pC;
24、0; pC->right=pC; else
25、 pC->right->left=node; node->right=pC->right;
26、0; pC->right=node;
27、160; node->left=pC; else/如果pB的头节点
28、和data不相等 phead=pB->right; while (pB!=phead && phead->data != data)
29、60; phead=phead->right; if
30、(phead->data = data) node=new Dbnode; node->data=data;
31、60; node->right=node; node->left=node;
32、60; if (pC=NULL) /如果pC为NULL pC=node;
33、160; pC->left=pC; pC->right=pC;
34、; else pC->right->left=node;
35、160; node->right=pC->right; pC->right=node;
36、160; node->left=pC;
37、 pA=pA->right; return pC; /删除节点中所有数值等于data的节点 Dbnode *DeleteNode(Dbn
38、ode *head,int data) if (head=NULL)/链表不存在返回NULL return NULL; Dbnode *node=NULL;
39、60; Dbnode *pdelnode=NULL; while(head->data=data) /如果头节点相等,则删除 if (head->right=head) /如果只有一个头节点,则返回NULL
40、60; delete head; return NULL; pdelnode=head; /保存即将删除的节点
41、160; node=head->right;/保存head的下一个节点 head->right->left=head->left; head->left->right=head->right;
42、60; head=node;/head的下一个节点作为头节点 delete pdelnode;/释放删除的节点 pdelnode =NULL; &
43、#160; Dbnode *phead=head->right; while (head!=phead) if (phead->data=data) while(p
44、head->data=data) pdelnode=phead; node=phead->right; /保存phead的下一个节点 &
45、#160; phead->right->left=phead->left; phead->left->right=phead->right;
46、160; phead=node; delete pdelnode;
47、60; pdelnode=NULL; else phead=phead->right;
48、160; return head; /删除链表A和链表B中所有含相同数据的节点 void DeleteEqual(Dbnode *pA,Dbnode *pB) Dbnode *pheadA=*pA;
49、0; Dbnode *pheadB=*pB; Dbnode *pheadC=NULL; if (pA=NULL | pB=NULL) /如果指针为NULL ,返回 return
50、60; if (pheadA=NULL | pheadB=NULL)/如果链表为空,返回 return; Dbnode *pC=GetLink(pheadA,pheadB);/获得公共集合
51、; if (pC=NULL) return; pheadA=DeleteNode(pheadA,pC->data);/删除pheadA和pheadB中和pC的头节点值相等的所有节点 pheadB=D
52、eleteNode(pheadB,pC->data); pheadC=pC->right; while (pheadC!=pC) /循环删除pheadA和pheadB中和pC的头节点值相等的所有节点 pheadA=DeleteNode(pheadA,pheadC->data);
53、0; pheadB=DeleteNode(pheadB,pheadC->data); pheadC=pheadC->right; *pA=pheadA;/把处理后的链表再分别赋给pA和pB
54、 *pB=pheadB; /打印双向循环链表 void Print(Dbnode *head) if (NULL=head) /head为NULL表示为空链表 getch
55、ar(); return; cout<<head->data<<" " /先打印出表头 Dbnode *p=head->right;
56、60; while (head!=p) /依次遍历,直到到达表尾 cout<<p->data<<" " p=p->right; &
57、#160; cout<<endl; int _tmain(int argc, _TCHAR* argv) Dbnode *pA=NULL; Dbnode *pB=NULL; Dbnode *pC=NULL; Dbnode *pheadC=pC; Dbnode *pfind=NULL; Dbnode *pNhead=NULL; Dbnode *pList=NULL; pA=CreateNode(0);/
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024智慧城市交通信号控制系统优化合同
- 2025年度橙子包装设计与定制生产合同2篇
- 2025年度环保设备销售与服务合同4篇
- 2024版人身损害赔偿协议
- 二零二四年外墙清洗专业团队服务合同样本3篇
- 2024-2025学年高中地理第一章环境与环境问题第一节我们周围的环境课时分层作业含解析新人教版选修6
- 二零二五版城市综合体土方运输与临时堆场租赁合同3篇
- 二零二五年度餐饮业人力资源派遣合同范本3篇
- 2025年特色小镇物业经营权及配套设施合作合同3篇
- 二零二五版科技公司股份交易与税收筹划合同3篇
- 精神病院设置可行性方案
- WPF框架系列课程(小白进阶选择)
- 小儿肠梗阻护理查房
- 小学音乐《编花篮》
- 污水处理站管理制度及操作规程
- 基于自适应神经网络模糊推理系统的游客规模预测研究
- 河道保洁服务投标方案(完整技术标)
- 品管圈(QCC)案例-缩短接台手术送手术时间
- 精神科病程记录
- 阅读理解特训卷-英语四年级上册译林版三起含答案
- 清华大学考博英语历年真题详解
评论
0/150
提交评论