《数据结构》 循环链表和双向链表常用操作代码集合
来源:互联网 发布:杰科网络电视机顶盒r1 编辑:程序博客网 时间:2024/04/30 10:49
Ps:每段代码中,添加了署名Solo的代码为博主本人所写,其余来自课本或者老师。
大量操作等同于单链表。重复的操作不再贴出,可以查看之前的博文。
循环链表
//结构体部分同单链表 略//初始化循环链表InitCLinkList(LinkList *CL){ *CL = (LinkList)malloc(sizeof(Node)); //建立循环链表的指针 (*CL)->next = *CL; //建立空的循环链表}//尾插法建立循环单链表void CreateCLinkList(LinkList CL)/*CL是定义好的,已经初始化好的、带头结点的空循环链表的头指针通过键盘输入元素值*/{ Node *rear, *s; char c; rear = CL; /*rear指针动态地指向链表的当前表尾,其初值指向头结点*/ while((c = getchar()) != '$') { s = (Node *)malloc(sizeof(Node)); s->data = c; rear->next = s; s = rear; } rear->next = CL; /*最后一个节点的nxt域指向头结点*/}//循环链表的合并算法(1)LinkList merge_1(LinkList LA, LinkList LB){ /*此算法将采用头指针的循环单链表的首尾链接起来*/ Node *p,*q; p =LA; q = LB; while(p->next != LA) p = p->next; while(q->next != LB) q = q->next; q->next = LA; //修改表LB的尾指针,指向表LA的头结点 p->next = LB->next; //修改LA的尾指针,指向LB的首元结点 free(LB); return(LA);}//循环链表的合并算法(2)LinkList merge_2(LinkList RA, LinkList RB) //注意,RA、RB是尾指针{ /*此算法将两个采用尾指针的循环单链表的首尾链接起来*/ Node *p; p = RA->next; /*保存链表RB的头结点地址*/ RA->next = RB->next->next; /*链表RB的开始结点链到链表RA的终端结点之后*/ free(RB->next); /*释放链表RB的头结点*/ RB->next = p; /*链表RB的开始结点链到链表RA的终端结点之后*/ return RB;}
双向链表
//双向链表的结构体定义如下typedef struct DNode{ ElemType data; struct DNode *prior, *next;} DNode, *DoubleList;#define OK 1#define ERROR 0//双向链表的前插操作int DlinkIns(DoubleList L, int i, ElemType e){ DNode *s, *p; p = L; k = 0; while(p && k<i) //检查插入位置是否合法 { p = p->next; k++; } if(!p || k>i) return ERROR; s = (DNode *)malloc(sizeof(DNode)); if(s) { s->data = e; s->prior = p->prior; p->prior->next = s; s->next = p; p->prior = s; //四个步骤不能换位置,否则会产生指针丢失 return OK; }}//双向链表的删除操作int DLinkList(DoubleList L; int i; ElemType *e){ DNode *p; p = L; k = 0; while(p && k<i) { p = p->next; k++} if(!p || k>i) return ERROR; *e = p->data; p->prior->next = p->next; p->next->prior = p->prior; free(p); return OK;}
zhihu:Solo | weibo@从流域到海域
1 0
- 《数据结构》 循环链表和双向链表常用操作代码集合
- 数据结构-----双向循环链表
- 数据结构 -- 双向循环链表
- 数据结构--循环双向链表
- 数据结构(双向循环链表)
- 数据结构-双向循环链表
- 数据结构-双向循环链表
- 数据结构-双向循环链表(无头结点)相关操作
- 数据结构学习之双向循环链表操作
- 《数据结构》 顺序表常用操作代码集合
- 双向循环链表操作
- 双向循环链表操作
- <数据结构>线性表.循环链表和双向链表
- 数据结构---线性表----循环链表和双向链表
- 数据结构之静态链表和双向循环链表
- 数据结构(十)循环链表和双向链表
- 数据结构——循环单链表和双向链表
- 数据结构--双向循环链表--插入和删除
- JavaScript 学习
- JAVA 异常处理
- c++ 指针(一)及sprintf函数
- poj 1185 炮兵阵地(状压dp)
- Struts.xml 中的11种Result-Type类型
- 《数据结构》 循环链表和双向链表常用操作代码集合
- jQuery学习笔记——选择器2
- IT行业导览-第3章-相关职位
- 公有的、私有的、受保护的继承
- 3998: [TJOI2015]弦论 后缀自动机
- BZOJ 3531 SDOI2014 旅行(travel) 树链剖分模板题
- Observable和Observer
- 全排列 枚举
- VC6.0 fatal error C1853: 'Debug/xx.pch' is not a precompiled header