zoukankan      html  css  js  c++  java
  • 有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;
    }
  • 相关阅读:
    self 和 super 关键字
    NSString类
    函数和对象方法的区别
    求两个数是否互质及最大公约数
    TJU Problem 1644 Reverse Text
    TJU Problem 2520 Quicksum
    TJU Problem 2101 Bullseye
    TJU Problem 2548 Celebrity jeopardy
    poj 2586 Y2K Accounting Bug
    poj 2109 Power of Cryptography
  • 原文地址:https://www.cnblogs.com/qixin622/p/1238758.html
Copyright © 2011-2022 走看看