C语言之基于链表实现排序

题目:通过链表实现从小到大进行排序

代码:

#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;
}

效果截图:

猜你喜欢

转载自blog.csdn.net/qq_42680327/article/details/104277729
今日推荐