数据结构实验之链表六:有序链表的建立
Description
输入N个无序的整数,建立一个有序链表,链表中的结点按照数值非降序排列,输出该有序链表。
Input
第一行输入整数个数N;
第二行输入N个无序的整数。
Output
依次输出有序链表的结点值。
Sample
Input
6
33 6 22 9 44 5
Output
5 6 9 22 33 44
Hint
不得使用数组!
#include <stdio.h>
#include <stdlib.h>
struct node
{
int data;
struct node* next;
};
int main()
{
int n, i,t;
struct node* head, * p, * tail,*q;
head = (struct node*)malloc(sizeof(struct node));
tail = head;
scanf("%d", &n);
for (i = 0; i < n; i++)//顺序建表
{
p= (struct node*)malloc(sizeof(struct node));
scanf("%d", &p->data);
p->next =NULL;
tail->next = p;
tail = p;
}
q = (struct node*)malloc(sizeof(struct node));
for (p = head->next; p; p = p->next)//排序,非降序
{
for (q = p->next; q; q = q->next)
{
if (p->data > q->data)//前大后小则调换位置
{
t = p->data;
p->data = q->data;
q->data = t;
}
}
}
p = head->next;
while (p)//输出
{
if (p->next)
{
printf("%d ", p->data);
}
else
{
printf("%d\n", p->data);
}
p = p->next;
}
}
排序可类比选择排序思想:从第一个数开始,每次和后面剩余的数依次进行比较,非降序,前大后小,进行交换,就会将当前的最小值放在当前的位置。