《数据结构》 循环链表和双向链表常用操作代码集合
2016-03-23 21:00
344 查看
Ps:每段代码中,添加了署名Solo的代码为博主本人所写,其余来自课本或者老师。
大量操作等同于单链表。重复的操作不再贴出,可以查看之前的博文。
循环链表
双向链表
zhihu:Solo | weibo@从流域到海域
大量操作等同于单链表。重复的操作不再贴出,可以查看之前的博文。
循环链表
//结构体部分同单链表 略 //初始化循环链表 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@从流域到海域
相关文章推荐
- bzoj3223 && Tyvj 1729 文艺平衡树
- MySQL索引背后的数据结构及算法原理
- 数据结构之双链表操作
- 《数据结构》 单链表常用操作代码集合
- 《数据结构》 顺序表常用操作代码集合
- 数据结构之排序
- Java泛型数据结构Map和List
- 数据结构与算法分析---表ADT
- 大话数据结构读书笔记系列(一)数据结构绪论
- 数据结构9-查找
- 数据结构学习笔记--(1)利用递归求N!
- hdu 4027(线段树)
- 【MySQL解惑】索引背后的数据结构及算法原理
- 数据结构8-排序2
- 数据结构---线性表----循环链表和双向链表
- 数据结构---线性表----循环链表和双向链表
- 数据结构---线性表----循环链表和双向链表
- 数据结构---线性表----循环链表和双向链表
- 数据结构---线性表----循环链表和双向链表
- 数据结构---线性表----循环链表和双向链表