前言

大家在做学生成绩管理系统的时候,其中一个功能是要实现对学生的成绩从高到低排名,如果数据是存储在数组中的话,会很容易实现,但是这时成绩信息作为结构体成员被保存在单链表中,所以在每一轮交换排序的时候,地址不像数组那样可以简单通过下标转换而改变 所以在这里给大家分享下单链表的冒泡排序 。

冒泡排序

先说说冒泡排序的中心思想:通过对无序序列的相邻元素两两比较交换,每次把最大(小)的数据放在最后,这个过程就像是冒泡一样,所以叫他冒泡排序。

void bubble_sort(int a[], int n)
{int i, j, temp;for (j = 0; j < n - 1; j++)for (i = 0; i < n - 1 - j; i++){if (a[i] > a[i + 1]){temp = a[i];a[i] = a[i + 1];a[i + 1] = temp;}}
}

在数组中冒泡排序之所以容易实现的原因在于: 数组中数据在内存中的存储是连续的,并且通过下标的改变就可以轻松改变指针所指的地址

但在链表中,每个节点在内存中的位置是不确定的,所以不容易改变指针所指地址,来重复对链表内相邻节点的数据进行比较。

单链表冒泡排序

  • 创建链表
#include <stdio.h>
#include <stdlib.h>
struct Node
{int data;struct Node* next;
};
struct Node* createList()
{struct Node* headNode = (struct Node*)malloc(sizeof(struct Node));headNode->next = NULL;return headNode;
}
struct Node* createNode(int data)
{struct Node* headNode = (struct Node*)malloc(sizeof(struct Node));headNode->data = data;headNode->next = NULL;return headNode;
}
void insertNodeByHead(struct Node* headNode, int data)
{struct Node* newNode = createNode(data);newNode->next = headNode->next;headNode->next = newNode;
}
void printList(struct Node* headNode)
{struct Node* pMove = headNode->next;while (pMove){printf("%d->", pMove->data);pMove = pMove->next;}printf("\n");
}
int main()
{struct Node* list = createList();insertNodeByHead(list, 3);insertNodeByHead(list, 1);insertNodeByHead(list, 2);   insertNodeByHead(list, 5);printList(list);system("pause");return 0;
}
  • 冒泡排序
void  BubbleSort(struct Node* list)
{for (struct Node* first = list->next; first != NULL; first = first->next){for (struct Node* second = list->next; second != NULL; second = second->next){if (second->next != NULL){if (second->data.age > second->next->data.age) {int  temp = second->data;second->data = second->next->data;second->next->data = temp;}}}}
}

单链表类型是有头节点的链表,理解过程之后你可以试着用无头节点类型的单链表实现以下,举一反三。更多内容,点击获取

C语言单链表冒泡排序相关推荐

  1. C语言一趟冒泡交换最小值,C语言单链表冒泡排序为啥以下代码实现不了?

    struct node *sort(struct node *head)/*排序*/ { struct node *p,*q; struct node *temp; for(p=head;p!=NUL ...

  2. 字符串的冒泡排序c语言,c语言单链表冒泡排序_c语言字符串排序冒泡法_c语言链表排序...

    1. #include 2. 3. struct Node; 4. 5. typedef struct Node *PtrToNode; 6. typedef PtrToNode List; 7. t ...

  3. c语言单链表冒泡排序的步骤,急!!求c语言单链表冒泡排序的详细流程图

    满意答案 #include #include struct number { int num; struct number *next; }; void main() { struct number ...

  4. C语言单链表基本操作总结

    C语言单链表基本操作     本文是参考他人实现的C语言单链表,对多篇博文整理的结果,仅作为学习笔记.文末有参考出处. 1.单链表定义 链表是通过一组任意的存储单元来存储线性表中的数据元素,这些存储单 ...

  5. c语言单链表输出26英文字母,C语言单链表的实现

    单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素. 链表结构: SList.h #pragma once typedef int DataType; typedef st ...

  6. c语言单链表功能,[数据结构]单链表(C语言)的各种功能

    06-03阅读200,000 + 链表是一种常见的基本数据结构,在此充分利用了结构指针. 链表可以动态存储和分配,即链表是一个功能非常强大的数组. 他可以在节点中定义多种数据类型,并可以根据需要随意添 ...

  7. C语言单链表,能直接运行的代码!

    C语言单链表,实现增删改查 不废话 直接上代码,COPY就能运行 #include <stdio.h> #include <stdlib.h> /** *定义数据元素 */ t ...

  8. C++语言单链表实现荷兰旗问题

    C++语言单链表实现荷兰旗问题 一.设备及软件 VC6.0 二.语言 C++ 三.涉及的数据结构与算法 单链表.尾插法 四.问题描述 荷兰旗问题亦称三色旗问题. 这里荷兰旗用0,1,2分别表示三种颜色 ...

  9. C语言单链表代码实现

    C语言单链表代码实现 一.头文件.常量以及自定义数据结构 #include<stdio.h> #include<malloc.h> #include<stdlib.h&g ...

最新文章

  1. 最短路问题的原始对偶算法形式
  2. Verilog中`define和parameter有什么区别
  3. 小学计算机课计划,小学信息技术教学工作计划
  4. java 任意数平均值_【编程题】通过键盘输入三个任意的数字,计算三个值的平均值,并输出结果。...
  5. .net foreach 未执行完就到下一行了_PHP五十个提升执行效率的小技巧,和常见问题...
  6. LFS-构建自己的linux
  7. JDBC学习笔记(7)——事务的隔离级别批量处理
  8. libevent源码深度剖析三
  9. 华为P50系列再曝“坏消息”:疑似再度延期至7月份
  10. php源生生成pdf_TCPDF - 可生成PDF文档和条形码PHP库
  11. LeetCode--026--删除排序数组中的重复项(java)
  12. Design Patterns
  13. 编程规范基础学习笔记
  14. 简单web服务器的实现(C++)
  15. java 中阶乘如何表示_Java阶乘实例
  16. python免费课件-python入门ppt下载
  17. Excel常用公式之LOOKUP
  18. 关于城市旅游的HTML网页设计 HTML+CSS+JS学生旅游网页设计与实现
  19. Js实现别踩白块儿小游戏
  20. 程序员赚钱的六种方式,是时候告别996了

热门文章

  1. 记录一下Java访问https服务出现的异常情况
  2. Python爬取冰冰的第一条vlog并进行数据分析
  3. 高效解决触客难题的外呼系统,其实原理很简单!
  4. ssh配置config快速登录服务器
  5. Oracle数据库编程
  6. mysql做kv数据库_从零开始写KV数据库:基于哈希索引
  7. Rocscience Slide v6.002 边坡稳定性分析\
  8. MySQL 修改默认值
  9. pos机小票打印机編程
  10. echarts 图表的滚动条