IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> #数据结构:在带头结点的单链表上编写一个实现int类型数据的冒泡排序算法 -> 正文阅读

[数据结构与算法]#数据结构:在带头结点的单链表上编写一个实现int类型数据的冒泡排序算法

在带头结点的单链表上,要求:编写一个实现int类型数据的冒泡排序算法。

一、问题描述

编写一个实现int类型的冒泡排序算法

二、基本要求

1) 建立一个带头节点的链表

2) 实现int类型数据

3) 冒泡排序算法

三、算法思想

冒泡排序的基本思想 冒泡排序是交换排序中一种简单的排序方法。它的基本思想是对所有相邻记录的关键字值进行比效,如果是逆顺(a[j]>a[j+1]),则将其交换,最终达到有序化; 其处理过程为:

(1)将整个待排序的记录序列划分成有序区和无序区,初始状态有序区为空,无序区包括所有待排序的记录。

(2)对无序区从前向后依次将相邻记录的关键字进行比较,若逆序将其交换,从而使得关键字值小的记录向上”飘浮”(左移),关键字值大的记录好像石块,向下“堕落”(右移)。 每经过一趟冒泡排序,都使无序区中关键字值最大的记录进入有序区,对于由n个记录组成的记录序列,最多经过n-1趟冒泡排序,就可以将这n个记录重新按关键字顺序排列。

2.原始的冒泡排序算法 对由n个记录组成的记录序列,最多经过(n-1)趟冒泡排序,就可以使记录序列成为有序序列,第一趟定位第n个记录,此时有序区只有一个记录;第二趟定位第n-1个记录,此时有序区有两个记录;以此类推,算法框架为: for(i=n;i>1;i--){定位第i个记录}

四、数据结构

typedef int ElemType;

typedef struct Node

{

??? ElemType data;

??? struct Node *next;

}SLNode;

五、模块划分

(1) typedef struct Node定义结构体并新命名SLNode

(2) SLNode * CreateList(int *arr,int length) 利用尾插法创建带头结点的单链表并通过数组来传递数据

(3) void BubbleSort(SLNode *head)冒泡排序法的具体结构和详细思路

(4) void Display(SLNode *L)将冒泡排序法得到的排序结果打印出来

(5) int main()主函数,实现多个函数的调用并实现功能

六、源程序

#include<stdio.h>

#include<stdlib.h>

typedef int ElemType;// ElemType的含义就是“数据元素的类型”,是一个抽象的概念,是表示我们所要使用的数据元素应有的类型, 一种结构中元素的类型不一定是整型、字符型、浮点型或者用户自定义类型,为了不重复说明,使用过程中用“elemtype”代表所有可能的数据类型,简单明了的概括了整体。

typedef struct Node

{

??? ElemType data;

??? struct Node *next;

}SLNode;

//创建带头结点的单链表(尾插法)

SLNode * CreateList(int *arr,int length)? //通过数组来传递数据

{

??? SLNode *p,*head=NULL,*tail=NULL;

??? head=( SLNode *)malloc(sizeof(SLNode));

??? head->next=NULL;

??? tail=head;

??? for(int i=0;i<length;i++)

??????? {

??????????? p=( SLNode *)malloc(sizeof(SLNode));

??????????? tail->next=p;

??????????? p->data=arr[i];

??????????? p->next=NULL;

??????????? tail=p;

??????? }

??? return head;? //返回头指针

}

//冒泡排序算法

void BubbleSort(SLNode *head)

{

??? SLNode *p, *q, *tail;??? //tail作为每趟比较的截止标志

??? tail = NULL;

??? while((head->next->next)!=tail)

??? {

??????? p = head;????????????? //p指向要进行比较的结点的前一个结点,对其初始化,是比较从头开始进行

??????? q = head->next;??????? //q指向要进行比较的结点,对其初始化,是比较从头开始进行

??????? while(q->next != tail)

??????? {

??????????? if((q->data) > (q->next->data))????? //将两个指针结点位置进行交换

??????????? {

??????????????? p->next = q->next;

??????????????? q->next = q->next->next;

??????????????? p->next->next = q;

??????????????? q = p->next;

????? ??????}

??????????? q = q->next;

??????????? p = p->next;

??????? }

??????? tail = q;

??? }

}

//打印结果

void Display(SLNode *L)

{

??? SLNode *p;

??? p=L->next;

??? while(p)

??? {

??????? printf("%d\t",p->data);

??????? p=p->next;

??? }

}

int main()

{

??? int arr[]={7,45,20,84,37};

??? SLNode *L;

??? L=CreateList(arr,sizeof(arr)/sizeof(arr[0]));

??? printf("\n排序前序列为:\n");

??? Display(L);

??? printf("\n");

??? BubbleSort(L);

??? printf("\n排序后的序列为:\n");

??? Display(L);

??? printf("\n\n");

??? return 0;

}

七、测试数据

(1)7, 45, 20, 84, 37

(2)35,88,20,49,31

八、运行及测试情况

(1)

(2)

?

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-05-24 18:28:41  更:2022-05-24 18:29:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 1:25:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码