美文网首页
第四次周测

第四次周测

作者: 张轻舟 | 来源:发表于2021-04-19 09:19 被阅读0次

/*
有两个链表a和b,设节点中包含学号、成绩。 从a链表中删去b链表中有相同学号的那些节点。

输入
第一行有两个用空格隔开的整数n和m,分别表示a和b两个链表中的节点个数。 保证n和m均不超过100。
之后的n行每行有两个用空格隔开的整数,分别表示一个学生的学号和成绩。
最后的m行每行有两个用空格隔开的整数,分别表示一个学生的学号和成绩。
a和b两个链表中的节点并不一定按照学号顺序排列。 保证a链表中学号各不相同,b链表中学号各不相同。

输出
首先输出a链表最终剩下的节点个数k。
在接下来的k行,每行输出两个用空格隔开的整数,分别表示一个学生的学号和成绩。
请注意行尾输出换行。
*/

/*

#include<stdio.h>  
#include <stdlib.h>
typedef struct student  
{
    int num;
    int score;
    struct student *next;
}Student;
Student *create(int n)  
{
    Student *p,*head,*q;
    int i;
    head=(Student *)malloc(sizeof(Student));
    for(i=0;i<n;i++)
    {  
        p=(Student *)malloc(sizeof(Student));
        scanf("%d%d",&p->num,&p->score);
        p->next=NULL;       
        if(i==0) head->next=p;
        else q->next=p;
        q=p;
    }
    return head;      
}
int count(Student *head)  
{
    Student *p;
    int n=0;
    p=head->next;
    while(p!=NULL)
    {
        p=p->next;
        n++;       
    }  
    return n;
}
void print(Student *head) 
{
    Student *p;
    p=head->next;
    while(p!=NULL)
    {
        printf("%d %d\n",p->num,p->score);
        p=p->next;
    }
}
Student *del(Student *heada,Student *headb) 
{
    Student *pa,*pb,*qa,*qb;
    int y;
    pa=heada;  
    while(pa->next!=NULL)
    {
        pb=headb;
        y=0; 
        while(pb->next!=NULL)
        {
            if(pa->next->num==pb->next->num)
            {              
                qa=pa->next;
                pa->next=qa->next;
                free(qa);
                qb=pb->next;
                pb->next=qb->next;
                free(qb);
                y=1;
            }
            else pb=pb->next;          
        }
        if(y==0) pa=pa->next;
    }
    return heada;
}
 
int main()  
{  
    int m,n;
    int k;
    Student *heada,*headb,*p;
    scanf("%d%d",&n,&m);
    heada=create(n); 
    headb=create(m);
    heada=del(heada,headb);
    k=count(heada);
    printf("%d\n",k);
    print(heada);  
    p=heada;      
    while(p!=NULL)
    {
        heada=heada->next;
        free(p);
        p=heada;       
    }
    p=headb;  
    while(p!=NULL)
    {
        headb=headb->next;
        free(p);
        p=headb;       
    }
     
    return 0;  
}

*/

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

输入
第一行,a、b两个链表元素的数量N、M,用空格隔开。 接下来N行是a的数据 然后M行是b的数据 每行数据由学号和成绩两部分组成

输出
按照学号升序排列的数据
*/

#include <stdio.h>
struct student
{   int num;
    int score;

};
int main()
{
    int n,m,i,j,t;
    struct student a[100];
    scanf("%d%d",&n,&m);
    for(i=0; i<n; i++)
    scanf("%d%d",&a[i].num,&a[i].score);
    for(i=n; i<m+n; i++)
    scanf("%d%d",&a[i].num,&a[i].score);
    for(i=0; i<m+n; i++)
    {   
        for(j=0; j<m+n-i-1;j++)
        if(a[j].num>a[j+1].num)
        {   
            t=a[j].num;
            a[j].num=a[j+1].num;
            a[j+1].num=t;
            t=a[j].score;
            a[j].score=a[j+1].score;
            a[j+1].score=t;
        }
    }
    for(i=0; i<m+n; i++)
    printf("%d%d\n",a[i].num,a[i].score);
    return 0;
}

相关文章

网友评论

      本文标题:第四次周测

      本文链接:https://www.haomeiwen.com/subject/pgzblltx.html