• 有a,b两个已按学号升序排序的链表,每个链表中的结点包括学号、成绩。要求把两个链表合并,仍按学号升序排列。


    #include <stdio.h>
    #include 
    <stdlib.h>
    #define N 10
    typedef 
    struct student
    {
        
    int num;
        
    float score;
        
    struct student *next;
    }STU;

    STU 
    *create()
    {
        
    int i;
        STU 
    *p,*head=NULL,*tail=head;
        
    for (i=0;i<N;i++)
        {
            p
    =(STU *)malloc(sizeof(STU));
            scanf(
    "%d%f",&p->num,&p->score);
            p
    ->next=NULL;
            
    if (p->num<0)
            {
                free(p);
                
    break;
            }
            
    if(head==NULL)
                head
    =p;
            
    else
                tail
    ->next=p;
            tail
    =p;
        }
        
    return head;
    }

    void output(STU *p)
    {
        
    while (p!=NULL)
        {
            printf(
    "%d\t%.2f\n",p->num,p->score);
            p
    =p->next;
        }
    }

    STU 
    *link(STU *p1,STU *p2)
    {
        STU 
    *p,*head;
        
    if (p1->num<p2->num)
        {
            head
    =p=p1;
            p1
    =p1->next;
        }
        
    else
        {
            head
    =p=p2;
            p2
    =p2->next;
        }
        
    while (p1!=NULL&&p2!=NULL)
        {
            
    if (p1->num<p2->num)
            {
                p
    ->next=p1;
                p
    =p1;
                p1
    =p1->next;
            }
            
    else
            {
                p
    ->next=p2;
                p
    =p2;
                p2
    =p2->next;
            }
        }
        
    if(p1!=NULL)
            p
    ->next=p1;
        
    else
            p
    ->next=p2;

        
    return head;
    }

    int main(int argc, char *argv[]) 
    {
        STU 
    *a,*b,*c;
        printf(
    "\n请输入链表a的信息,学号小于零时结束输入:格式(学号 成绩)\n");
        a
    =create();
        printf(
    "\n请输入链表b的信息,学号小于零时结束输入:格式(学号 成绩)\n");
        b
    =create();
        printf(
    "\n链表a的信息为:\n");
        output(a);
        printf(
    "\n链表b的信息为:\n");
        output(b);
        c
    =link(a,b);
        printf(
    "\n合并后的链表信息为:\n");
        output(c);

        
    return 0;
    }
  • 相关阅读:
    C语言二维数组
    Foxyproxy 火狐代理插件
    Midas Civil的钢束生成器
    foobar2000 – ELPlaylist
    Foobar2000-CUI 小结
    Foobar2000–panel stack splitter
    Foobar2000 使用说明
    foobar2000-new
    书匠
    图片转文字 ocr 汉王
  • 原文地址:https://www.cnblogs.com/qixin622/p/1238758.html
Copyright © 2020-2023  润新知