15.给链表中的数据排序

来源:互联网 发布:淘宝照相技巧 编辑:程序博客网 时间:2024/06/05 12:43

给定程序中,函数fun的功能是将带头节点的单向链表节点数据中的数据从小到大排序,即若原链表节点数据从头至尾的数据为:10、4、8、6,排序后链表节点数据从头至尾的数据为:2,、4、6、8、10.



#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#define N 6typedef struct node{int data;struct node *next;}NODE;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;p = 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,2,4,8,6 };head = creatlist(a);printf("\nThe original list:\n");outlist(head);fun(head);printf("\nThe list after sorting:\n");outlist(head);getchar();return 0;}



0 0