#include <iostream>
using namespace std;
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode* next;
} LinkNode, * LinkList;
void swap(ElemType& a, ElemType& b)
{
ElemType temp;
temp = a;
a = b;
b = temp;
}
LinkList CreateList(LinkNode*& L)
{
int x;
L = (LinkList)malloc(sizeof(LinkNode));
LinkNode* s;//s代表每次新插入的结点
LinkNode* r = L;//r指向链表的尾结点
cout << "请输入待排序的元素(以9999结束): " << endl;
scanf_s("%d", &x);
while (x != 9999)
{
s = (LinkNode*)malloc(sizeof(LinkNode));
s->data = x;
r->next = s;
r = s;
scanf_s("%d", &x);
}
r->next = NULL;
return L;
}
void DispList(LinkNode* L)
{
LinkNode* p = L->next;//p指向开始结点
while (p != NULL)
{
cout << p->data << "\t";
p = p->next;
}
cout << endl;
}
void DestroyList(LinkNode*& L)
{
LinkNode* pre = L;
LinkNode* p = L->next;
while (p != NULL)
{
free(pre);
pre = p;
p = p->next;
}
free(pre);
}
//求单链表的长度
int Length(LinkList L)
{
int len = 0;
LinkNode* p = L;
while (p->next != NULL)
{
p = p->next;
len++;
}
return len;
}
void BubbleSort(LinkList& L)
{
LinkNode* q;
if (p == NULL) //链表为空,比个毛线
{
return;
}
//求链表长度
int length = Length(L);
//每次排序都形成一个无序区中最大的元素,结束后长度减少1个。
for (int i = 0; i < length; i++,length--)
{
LinkNode* p = L->next;//每一趟开始都从第一个数据结点开始遍历
while (p != NULL)
{
q = p->next;
if (q != NULL && p->data > q->data)
{
swap(p->data, q->data);
}
p = p->next;
}
}
}
int main()
{
LinkList L;
//创建单链表
CreateList(L);
BubbleSort(L);
DispList(L);
DestroyList(L);
return 0;
}
基于链式存储结构实现冒泡排序
最新推荐文章于 2022-12-24 16:46:01 发布