链表实现冒泡排序
来源:互联网 发布:网络免费赚钱项目 编辑:程序博客网 时间:2024/06/06 15:02
单链表实现冒泡排序
- /************************************************************************/
- /* 用单链表实现冒泡排序,输入为0-9的数字字符 */
- /************************************************************************/
- #include <stdio.h>
- #include <stdlib.h>
- #define PR printf
- //定义一个单链表结构体
- typedef struct node{
- long data;
- struct node * next;
- }lklist;
- //快速排序,小的数据往前排,后的数据往后排
- lklist* sort(lklist * head)
- {
- if (head == NULL)
- return NULL;
- lklist* p = head->next;
- lklist* p_pre = p;
- bool flag = false; //用于标记是否有交换,当数组有序的时候,提高判断效率
- while(p_pre->next != NULL)
- {
- long temp = p_pre->data;
- p = p->next;
- while (p)
- {
- if(temp <= (p->data))
- {
- p = p->next;
- continue;
- }
- else
- {
- long temp_change;
- temp_change = p->data;
- p->data = p_pre->data;
- p_pre->data = temp_change;
- p = p->next;
- flag = true;
- }
- if (flag == false)
- {
- return head;
- }
- }
- p_pre = p_pre->next;
- p = p_pre;
- }
- return head;
- }
- //向含有一个头节点的单链表中插入数据
- lklist* create_lklist(lklist *head)
- {
- PR("please input the number of the data and end with q(Q):\n");
- while(1)
- {
- char ch[2];
- scanf("%s",ch);
- if(ch[0] == 'q' || ch[0] == 'Q') //输入为q(Q)时停止输入
- break;
- else
- {
- long intData = strtol(ch,0,10);
- lklist* temp = NULL;
- temp = (lklist*)malloc(sizeof(struct node));
- temp->data = intData;
- temp->next = NULL;
- temp->next = head->next;
- head->next = temp;
- }
- }
- return head;
- }
- //打印单链表中的数据信息
- void printf_lklist(lklist* head)
- {
- if (NULL == head)
- {
- return;
- }
- lklist * p = head->next;
- PR("the sorted number is:\n");
- while (p)
- {
- PR("%d ",p->data);
- p = p->next;
- }
- PR("\n");
- }
- //释放有数据的链表中的节点
- void free_lklist(lklist* head)
- {
- if (NULL == head)
- {
- return;
- }
- lklist * p = head->next;
- lklist *pre;
- while (p)
- {
- pre = p;
- p = p->next;
- free(pre);
- }
- }
- void main()
- {
- lklist *head = (struct node *)malloc(sizeof(struct node));
- head->next = NULL; //头节点不存放数据
- head = create_lklist(head);
- head = sort(head);
- printf_lklist(head);
- free_lklist(head);
- free(head); //释放申请的头节点
- }
阅读全文
0 0
- 链表实现冒泡排序
- 链表实现冒泡排序
- 链表实现冒泡排序
- 冒泡排序(链表实现)
- 递归实现链表的冒泡排序。
- 链表实现冒泡排序算法
- 伪冒泡排序------数组/链表实现
- 冒泡排序-----数组/链表实现
- 冒泡法实现链表排序
- 冒泡排序的链表实现
- 冒泡排序的链表实现
- 冒泡升序排序的数组实现和链表实现
- 链表冒泡排序
- 链表冒泡排序
- C语言链表实现冒泡法排序
- 双向链表操作(逆置三种实现以及 冒泡排序 )
- 数据结构 排序(冒泡排序改进,简单选择排序链表实现)
- ASP实现冒泡排序
- 我的shell命令集锦
- Service Providers 服务提供者
- PhotoSwipe 图片浏览,可放大缩小,左右滑动
- 二叉树 链表实现 模板
- Anaconda 打开 ipynb 文件并可设置路径
- 链表实现冒泡排序
- 初步理解client/server
- OpenGL蓝宝书源码学习(十三)第六章——OpenGL着色器和着色语言
- Huffman树的实现
- Multiply Strings
- Application Structure 应用结构
- Linux文件编程
- 获取URL参数
- java线程池与五种常用线程池策略使用与解析