PTA 7-4 有序链表的插入 (20 分)

    xiaoxiao2022-06-24  202

    已知一个递增有序链表L(带头结点,元素为整数),编写程序将一个新整数插入到L中,并保持L的有序性。 其中单链表的类型定义参考如下:

    typedef int elementType;

    typedef struct lnode

    { elementType data;

    struct lnode *next;

    }Lnode,* LinkList;

    输入格式:

    输入分三行

    第一行 元素个数

    第二行 元素的值,元素间用空格分隔。

    第三行 待插入的元素值

    输出格式:

    在一行中输出有序链表元素值,每个元素前输出一个空格以便与相邻元素分隔。

    输入样例:

    5 1 3 5 7 9 4

    输出样例:

    1 3 4 5 7 9 #include<stdio.h> #include<malloc.h> typedef int elementType; typedef struct lnode { elementType data; struct lnode *next; }Lnode; //尾插法 Lnode* CreateList(int a[],int n) { Lnode *p,*head,*node; int i; head = (Lnode*)malloc(sizeof(Lnode)); p = head; for(i = 0;i<n;i++) { node = (Lnode*)malloc(sizeof(Lnode)); node->data = a[i]; p->next = node; p = node; } p->next = NULL; return head; } void Insert(Lnode* head,int temp,int n) { Lnode *insert,*p; p = head->next; insert = (Lnode*)malloc(sizeof(Lnode)); int i; insert->data = temp; if(temp<p->data) { insert->next = p; head->next = insert; } for(i = 0;i<n-1;i++) { if((temp>p->data) && (temp<=p->next->data)) { insert->next = p->next; p->next = insert; } p = p->next; } if(temp>p->data) { p->next = insert; insert->next = NULL; } } void output(Lnode *head) { Lnode *p; p = head->next; while(1) { printf(" %d",p->data); if(p->next == NULL) { break; } p = p->next; } } int main() { Lnode *Linklist,*p; int n,i; int temp; scanf("%d",&n); if(n==0) { Linklist = (Lnode*)malloc(sizeof(Lnode)); scanf("%d",&temp); p = (Lnode*)malloc(sizeof(Lnode)); p->data = temp; Linklist->next = p; p->next= NULL; output(Linklist); return 0; } int a[n]; for(i = 0;i<n;i++) { scanf("%d",&a[i]); } scanf("%d",&temp); /*for(i = 0;i<n;i++) printf("%d",a[i]);*/ Linklist = CreateList(a,n); Insert(Linklist,temp,n); output(Linklist); return 0; }

     


    最新回复(0)