qjt


私信TA

用户名:qjt

访问量:2923

签 名:

等  级
排  名 8298
经  验 1242
参赛次数 0
文章发表 5
年  龄 0
在职情况 学生
学  校 湖南师范大学
专  业

  自我简介:

解题思路:

先将两个链表合并成一个,再对此链表进行选择排序。

注意事项:

注意链表循环的起始值。

参考代码:

#include <stdio.h>

#include<malloc.h>

typedef struct Stu{

int num;

int score;

struct Stu *next;

}stu;


//创建链表

stu *creat(int n){

stu *h=(stu *)malloc(sizeof(stu));

stu *p=h,*q;

for(int i=0;i<n;i++){

q=(stu *)malloc(sizeof(stu));

scanf("%d %d",&(q->num),&(q->score));

p->next=q;

p=q;

}

p->next=NULL;

return h;

}


//打印

void print(stu *h){

stu *p=h->next;

while(p!=NULL){

printf("%d %d\n",p->num,p->score);

p=p->next;

}

}


//排序

void sort(stu *a){

int i,min,temp;

stu *p=a,*q,*dex;

while(p->next!=NULL){

p=p->next;

q=p->next;

min=p->num;//保存学号最小值

dex=p;//记录学号最小值指针

while(q!=NULL){

if(q->num<min){

min=q->num;

dex=q;

}

q=q->next;

}

if(p->num>dex->num){

temp=p->num;//交换学号值

p->num=dex->num;

dex->num=temp;

temp=p->score;//交换分数值

p->score=dex->score;

dex->score=temp;

}

}

}


//合并

stu *merge(stu *a,stu *b){

stu *p=a->next,*q=b->next;

while(p->next!=NULL){

p=p->next;

}

p->next=q;

return a;

}



int main(){

stu *a;

stu *b;

int m,n;

scanf("%d%d",&n,&m);

a=creat(n);

b=creat(m);

a=merge(a,b);

sort(a);

print(a);

}


 

0.0分

0 人评分

  评论区

  • «
  • »