写给初学数据结构的同学之(循环双链表基本操作,创建,插入,删除,排序)
来源:互联网 发布:司南阁淘宝找不到 编辑:程序博客网 时间:2024/05/22 08:34
1.双向循环链表的创建:没什么好说的
NODE * Doublelinklist(){ NODE *head = NULL; return head;}
2.插入节点:
NODE *myinsert(NODE *head,NodeData Data){ NODE *last = head; if(head == NULL) { head = (NODE *)malloc(sizeof(NODE)); head->data = Data;head->next = head;head->pione = head; } else { NODE *newnode = (NODE *)malloc(sizeof(NODE));newnode->data = Data; while(last->next != head){ last = last->next;}last->next = newnode;newnode->pione = last;newnode->next = head;head->pione = newnode; } return head;}
3.删除节点:
NODE *myremove(NODE *head,int data){ NODE *q = head; if(head == NULL) { printf("该链表为空!无法再进行删除!\n");return head; } else { if(head->next == head){ if(head->data == data) { free(head);head = NULL;return head; } else { printf("没有相关结点!\n");return head; }}else{ if(head->data == data) { NODE *pre = head->pione;NODE *ne = head->next; head = head->next;pre->next = head;free(q);q = NULL;return head; } else { while((q->data != data) && (q->next != head)){ q = q->next;} if(q->data == data){ NODE *pre = q->pione; NODE *ne = q->next; pre->next = ne; ne->pione = pre; free(q); q = NULL; return head;}else{ printf("没有相关节点!\n"); return head;} }} }}
4.排序:我这里是用的冒泡排序,还可以用直接插入排序,选择插入排序,快速排序。
直接插入排序会比较容易实现,快速插入排序的基准有点蛋疼。
NODE *mysort(NODE *head){ NODE *p = head; NODE *max = head; NODE *ne = NULL; NODE *pre = NULL; int len = Doublelinklistlen(head); int i = len - 1; int j = len - 1; if((head == NULL) && (head->next == head)) { return head; } else { while(i--){ p = head; while(p->next != head) { if(p->next->data > p->data){ if(p == head) { head = p->next; } ne = p->next; pre = p->pione; p->next = p->next->next; p->next->pione = p; ne->next = p; p->pione = ne; ne->pione = pre; pre->next = ne;}else{ p = p->next; } }} } return head;}
实践出真知,好好先直接试着写写,写不出来再看别人的。或者先好好看,然后再直接试着写写。最好不要一边看,一边写~~~~~~~
下面,我会继续更新一些其他的数据结构的知识,我个人觉得,学习数据结构,多画画图,要知道一些数据结构的基本操作,单链表太简单,我只会说一下单链表的转置,
然后就栈和队列,树(以二叉树为主),排序等等~~~~~~希望有兴趣的同学可以关注~~~~~~~
- 写给初学数据结构的同学之(循环双链表基本操作,创建,插入,删除,排序)
- 数据结构学习(五)——循环双链表的操作之创建,插入、删除
- 数据结构之 单链表的基本操作(创建、取值、插入、删除)
- 写给初学数据结构的同学之(线性表(顺序表,链表))
- C/C++学习(九)循环双链表的操作之创建,插入、删除
- 堆的基本操作:定义、创建、插入、删除、排序
- 数据结构之 双链表的创建,删除,插入
- 数据结构(第二天)单向循环链表的创建,插入元素,(删除、查询元素跟单链表操作基本一致)
- 数据结构:链表的基本操作(创建,删除,插入,逆序,摧毁)
- 数据结构顺序表的操作全集(创建,遍历,插入,删除,排序等等)
- Linked List的基本操作(创建/删除/插入/查找)
- 单链表的基本操作(创建、插入、删除......)
- 二叉排序数的基本操作(构造、插入、删除)
- java语言编写链表的基本操作(链表的创建,插入,删除,打印,排序)
- 带头结点单链表的基本操作(创建、测长、打印、插入、删除、取值、合并、排序、逆置)
- 数据结构之链表操作,创建,插入,删除,查找。
- 数据结构之双向循环链表操作4-(插入,删除,建立等)
- 【数据结构】双链表的建立,排序,插入,删除
- 修改mysql密码的六种方法
- ObjC中isEqual与==的区别
- Pointers for developing selfservice in PeopleSoft
- 一道关于printf的题 求得2数和但是不用任何operator
- 【ACM暑假培训】2、递归算法···放苹果···
- 写给初学数据结构的同学之(循环双链表基本操作,创建,插入,删除,排序)
- Project Euler Problem 36
- 外贸中一些单词的缩写
- 微软免费的文档权限管理方案(RMS)
- PeopleSoft upgrade: a job well done!
- c# 实现P2p
- Google Hack
- 关于java
- 搜索--子集和