zhoulixHBG


私信TA

用户名:zhoulixiang

访问量:2751

签 名:

等  级
排  名 11383
经  验 1033
参赛次数 0
文章发表 7
年  龄 20
在职情况 学生
学  校
专  业 计算机科学与技术

  自我简介:

TA的其他文章


//声明结构体链表
typedef struct student{
    int num;
    int score;
    struct student *next;
}STU,*LINK;//定义
//创建结构体链表函数
LINK createLink(int n){//n为传入的结点数
    int i;
    int num,score;
    LINK head,tail,p;//定义 头 尾 利用尾插法创建列表
    head=tail=(LINK)malloc(sizeof(STU));//为head分配空间
    tail->next=NULL;
    for(i=0;i<n;i++){
        p=(LINK)malloc(sizeof(STU));
        scanf("%d",&num);
        scanf("%d",&score);
        p->num=num;
        p->score=score;
        p->next=NULL;//创建新结点
        tail->next=p;
        tail=p;
    }
    return head;
}
//判断删除结点函数
void process(LINK head1,LINK head2,int n){
    LINK pr=head1;
    int count=0;//记录删除的结点数
    LINK p=head1->next;
    int flag;//定义标志变量
    while(p!=NULL){
        flag=0;//标志变量为0时 表示没有相同学号
        LINK q=head2->next;//每次q需从头开始遍历链表
        while(q!=NULL){
            if(p->num==q->num){
                pr->next=p->next;//相同时 将前指针pr->next指向p的
                free(p);//x消除后释放 不用再变pr即不需要pr=pr->next;
                p=pr->next;//向后移动p
                flag=1;
                count++;//计数
                break;
            }
            q=q->next;//移动q
        }
        if(flag==0){//当无元素相同时 pr p分别向下移动
            pr=pr->next;
            p=p->next;
        }
    }
    printf("%d\n",n-count);//计算出剩余的结点
    LINK head=head1->next;
    while(head!=NULL){//打印输出
        printf("%d %d\n",head->num,head->score);
        head=head->next;
    }
}
int main(){
    int n,m;
    scanf("%d%d",&n,&m);
    LINK head1,head2;
    head1=createLink(n);
    head2=createLink(m);
    process(head1,head2,n);
    return 0;
}


 

0.0分

1 人评分

  评论区

  • «
  • »