题目:通过链表实现从小到大进行排序
代码:
#include <stdio.h>
#include <stdlib.h>
#define N 9//通过链表实现从小到大排序
typedef struct node {int data;struct node *next;
} NODE;//fun函数实现是将头结点的单向链表节点数据域中的数据从小到大排序
void fun(NODE *h)
{ NODE *p, *q; int t;p = h->next ;while (p) {q = p->next ;while (q) {if (p->data > q->data){ t = p->data; p->data = q->data; q->data = t; }q = q->next;}p = p->next;}
}NODE *creatlist(int a[])
{ NODE *h,*p,*q; int i;h = (NODE *)malloc(sizeof(NODE));h->next = NULL;for(i=0; i<N; i++){ q=(NODE *)malloc(sizeof(NODE));q->data=a[i];q->next = NULL;if (h->next == NULL){h->next = p = q;} else{ p->next = q; p = q; }}return h;
}void outlist(NODE *h)
{ NODE *p;p = h->next;if (p==NULL){printf("The list is NULL!\n");} else{ printf("\nHead ");do{ printf("->%d", p->data); p=p->next; }while(p!=NULL);printf("->End\n");}
}int main()
{ NODE *head;int a[N]= {0, 10, 4, 2, 8, 6 , 1 , 5 , 7};head=creatlist(a);printf("\nThe original list:\n");outlist(head);fun(head);printf("\nThe list after sorting :\n");outlist(head);return 0;
}