/*
有一个带头结点的单链表L,设计一个算法使其递增有序
分析:
我们可以采用冒泡排序对其操作,使其递增有序,时间复杂度为O(n^2)。
*/
#include<stdio.h>
#include<stdlib.h>
typedef struct LNode
{
int value;
struct LNode *next;
}LNode,*Linklist;
Linklist list_TailInsert(Linklist &L)
{ int value;
L = (Linklist)malloc(sizeof(LNode));
LNode *head = L,*rear = L;
head->next = NULL;
head->value = NULL;
printf("请输入链表一个结点的值,输入9999代表结束:");
scanf("%d",&value);
while(value != 9999)
{
LNode *s;
s = (Linklist)malloc(sizeof(LNode));
s->value = value;
s->next=NULL;
rear->next = s;
rear = s;
scanf("%d",&value);
}
rear->next = NULL;
}
void Display(Linklist L)
{
LNode *p = L->next ;
while(p != NULL)
{
printf("%d ",p->value);
p = p->next;
}
printf("\n");
}
void bubbleSort(Linklist &L)//冒泡排序
{
LNode *pre = L,*p = L->next,*q = p->next;
int flag = 0;//排序标志,如果产生过变动flag = 1
int count = 0;//记录链表长度
while(p != NULL)
{
count++;
p = p->next;
}
p = L->next;//切记,在计算链表长度后一定要重新设定p的指针
for(int i = 0;i < count;i++)
{
while(q != NULL)
{
pre = p;
p = q;
q = q->next;
if(p->value < pre->value)
{
p->next = pre;
L->next = p;
pre->next = q;
p=q;
q=q->next;
flag = 1;
}
else
{
pre = p;
p = q;
q = q->next;
}
if(flag==0)
{
break;
}
}
pre = L;
p = L->next;
q = p->next;
}
}
int main()
{
Linklist L1;
list_TailInsert(L1);
Display(L1);
bubbleSort(L1);
Display(L1);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
typedef struct LNode
{
int value;
struct LNode *next;
} LNode, *Linklist;
Linklist list_TailInsert() //(Linklist &L)
{
int value;
Linklist L = (Linklist)malloc(sizeof(LNode)); //
LNode *head = L, *rear = L;
head->next = NULL;
head->value = 0; //NULL;
printf("请输入链表一个结点的值,输入9999代表结束:");
scanf("%d", &value);
while (value != 9999)
{
//LNode *s;
Linklist s = (Linklist)malloc(sizeof(LNode));
s->value = value;
s->next = NULL;
rear->next = s;
rear = s;
scanf("%d", &value);
}
//rear->next = NULL;
return L; //
}
void Display(Linklist L)
{
LNode *p = L->next;
while (p != NULL)
{
printf("%d ", p->value);
p = p->next;
}
printf("\n");
}
void bubbleSort(Linklist L)
{
Linklist p = L->next, q;
int t;
while (p != NULL)
{
q = p->next;
while (q != NULL)
{
if (p->value > q->value)
{
t = p->value;
p->value = q->value;
q->value = t;
}
q = q->next;
}
p = p->next;
}
}
int main()
{
Linklist L1 = NULL;
L1 = list_TailInsert(); //
Display(L1);
bubbleSort(L1);
Display(L1);
return 0;
}