//Filename:BubleSort.cpp
//Writed by CaoLichen
//冒泡排序练习,数据以链表的结构存储
#include<stdio.h>
#include<stdlib.h>
//结点结构类型
typedef struct LNode
{
int data;
struct LNode *next; //指向后继结点
}SLink;
//建立线性表,
void CreateLink(SLink *head,int n)
{
SLink *tmp;
for(; n > 0; n--){
tmp = (SLink *)malloc(sizeof(SLink));
printf("请输入数据:");
scanf("%d",&tmp->data);
tmp->next = head->next; //头插法,逆序排放
head->next = tmp;
}
printf("建立线性表成功!\n");
}
//冒泡排序,从大到小排序,计数器count
void BubleSort(SLink *head)
{
int count = 0; //计数器,初始为0
int swap;
SLink *tmp;
while(1){
count = 0; //泡泡计数器归零
tmp = head->next;
while(tmp->next != NULL){
if(tmp->data < tmp->next->data){
swap = tmp->data;
tmp->data = tmp->next->data;
tmp->next->data = swap;
count ++; //完成一次冒泡
}
tmp = tmp->next; //前进一下
}
if(count == 0){
break;
}
}
printf("排序成功!\n");
}
//打印线性表
void PrintLink(SLink *head)
{
head = head->next;
while(head != NULL){
printf("%d\n",head->data);
head = head->next;
}
printf("打印线性表成功!\n");
}
int main(){
SLink *head; //头结点及其初始化
head = NULL;
head = (SLink *)malloc(sizeof(SLink));
head->next = NULL;
int n;
printf("请输入数据量:");
scanf("%d",&n);
CreateLink(head,n); //建立线性表,存放需要排序的数据
PrintLink(head); //打印线性表
BubleSort(head); //冒泡排序,从大到小
PrintLink(head); //打印线性表
return 0;
}
链表的冒泡排序
最新推荐文章于 2023-03-10 12:55:18 发布