54 链表排序

来源:互联网 发布:ubuntu安装步骤失败 编辑:程序博客网 时间:2024/05/20 10:56

对于输入的 n 个数据 num 进行排序,要求将输入的数据按 num 升序建立带有表头结点的链表,且链表中不能有重复的数据。

现在已经给出结点定义和程序框架,包括 main 函数和链表输出函数 outlist,请编写函数 sortlist 完成链表排序功能。

函数原型 sortlist( PNODE h, int num ) 的参数含义如下: 
       h :单链表的头指针
      num :新输入的需要插入链表中的数据


直接贴出所有代码吧,貌似54 55两题差不多,前两天写的记不清了。开了个博客还要3天后才能发表文章........

/* PRESET CODE BEGIN - NEVER TOUCH CODE BELOW */#include "stdio.h"struct node{int data;struct node * next;} ;typedef struct node NODE;typedef struct node * PNODE;outlist( PNODE head ){PNODE p;p = head->next;while ( p != NULL ){printf("%d\n", p->data);p = p->next;}}/*有序的插入 数据不重复  重复数据不加入*/void sortlist( PNODE h, int num ) {   PNODE t1;PNODE t2,t3;t1 = t2 = h;while((t2=t1->next)!=NULL){if(t2->data == num) break;else if(t2->data > num){t3 = (PNODE)malloc(sizeof(NODE));t3->data = num;t1->next = t3;t3->next = t2;}else{t1=t1->next;}    }if(t2==NULL){t3 = (PNODE)malloc(sizeof(NODE));t3->data = num;t3->next = NULL;t1->next = t3;}}int main ( ){   int num=1;PNODE head;head = (PNODE)malloc( sizeof(NODE) );head->next = NULL;head->data = -1;while ( num!=0 ){  scanf("%d", &num);if ( num!=0 )sortlist( head, num);}outlist( head );return 0;}