算法导论 10.2-6 带哨兵的双向链表合并两个不相交的集合
来源:互联网 发布:数据结构与算法的关系 编辑:程序博客网 时间:2024/06/05 14:27
/*O(1)合并S1、S2。S1、S2集合不相交。*//*需要能在O(1)时间内访问到S1、S2的头和尾的链表:带头结点和尾结点的单链表;双向循环链表。*///带哨兵的双向链表:S1头接S2尾,S2头接S1尾。#include<stdio.h>#include<stdlib.h>typedef struct NODE{ struct NODE*prev;char key;struct NODE*next;}NODE;NODE*NIL1=NULL,*NIL2=NULL;//两个双链表的哨兵结点。void insert(NODE**NIL,NODE*p)//将p插入到L首端{ (*NIL)->next->prev=p; p->next=(*NIL)->next; (*NIL)->next=p; p->prev=*NIL;}NODE* createnode(char key){ NODE*p=(NODE*)malloc(sizeof(NODE)); if(!p){ puts("memory exhausted.");exit(1); } p->key=key; return p;}void traverse(NODE* NIL){ NODE*p; for(p=NIL->next;p!=NIL;p=p->next) putchar(p->key); putchar(' ');putchar(' '); for(p=NIL->prev;p!=NIL;p=p->prev) putchar(p->key); putchar('\n');}void union1()//合并后成为NIL1{ NIL1->next->prev=NIL2->prev; NIL2->prev->next=NIL1->next; //putchar(NIL1->prev->prev->next->key);putchar(NIL1->prev->prev->key); NIL1->next=NIL2->next; NIL2->next->prev=NIL1; free(NIL2);}int main(void){ //创建2个空链表 NIL1=createnode(('#')); NIL1->next=NIL1->prev=NIL1; NIL2=createnode(('#')); NIL2->next=NIL2->prev=NIL2; int i; for(i=0;i<10;i++) insert(&NIL1,createnode('0'+i)); for(i=0;i<26;i++) insert(&NIL2,createnode('a'+i)); union1(); traverse(NIL1); return 0;}
0 0
- 算法导论 10.2-6 带哨兵的双向链表合并两个不相交的集合
- 【算法导论】10.2不带哨兵节点和带哨兵节点的双向链表
- 不带哨兵的双向链表
- 算法----带哨兵的双向链表
- 带哨兵的双向链表
- 带哨兵的环形双向链表
- 算法导论-带路径压缩的不相交集合C++实现
- 算法导论21(用于不相交集合的数据结构)
- 算法导论笔记:21用于不相交集合的数据结构
- 算法导论 第二十一章:不相交集合的数据结构
- 算法导论之用于不相交集合的数据结构
- 算法导论用于不相交集合的数据结构
- 数据结构--双向带哨兵的循环链表
- 《算法导论》笔记 第21章 21.2 不相交集合的链表表示
- 算法导论-第23章-最小生成树:Kruskal算法(基于按秩合并、路径压缩的不相交集合)C++实现
- 算法导论_不相交集合
- 算法导论学习笔记-第二十一章-用于不相交集合的数据结构
- 算法导论代码 第21章 用于不相交集合的数据结构
- Andoird的两种应用程序界面构建方式
- 周赛HDU超市服务
- uva 1471 Defense Lines
- POJ 1228 稳定凸包问题
- Centos6.5 hadoop新增datanode
- 算法导论 10.2-6 带哨兵的双向链表合并两个不相交的集合
- startActivityForResult与startActivity
- 华为OJ(尼科彻斯定理)
- Lucas定理(C(n,m)mod p)
- Python初学教程
- Android-使用ListView把SQLite中的数据显示至屏幕
- LeetCode 题解(173): Pow(x, n)
- 异常
- iOS面试题1