精华内容
下载资源
问答
  • 已有a,b两个链表,每个链表中的结点包括学号,成绩. 要求把两个链表合并, 按学号升序排列.

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

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    struct student {
    	int id;
    	char name[1024];
    	int score[3];
    	struct student* next;
    };
    typedef struct student stu;
    stu* creat(int n) {//创建链表
    	stu* s;
    	stu* head;
    	stu* p;
    	s = (stu*)malloc(sizeof(stu));
    	head = s;
    	p = head;
    	for (int i = 0; i < n; ++i) {
    		s= (stu*)malloc(sizeof(stu));
    		printf("请输入第%d个学生的信息\n", i + 1);
    		printf("请输入学号\n");
    		scanf("%d", &s->id);
    		printf("请输入姓名\n");
    		scanf("%s", &s->name);
    		for (int j = 0; j < 3; ++j) {
    			printf("请输入第%d门课的成绩\n", j + 1);
    			scanf("%d", &s->score[j]);
    		}
    		s->next = p->next;
    		p->next = s;
    		p = p->next;
    		if (i == n - 1) {
    			p->next = NULL;
    		}
    	}
    	return head;
    }
    void print(stu* head) {//输出
    	for (stu* p = head->next; p != NULL; p = p->next) {
    		printf("%d\t%s\t%d\t%d\t%d\n", p->id, p->name, p->score[0], p->score[1], p->score[2]);
    	}
    }
    void swap(stu* p, stu* q) {//交换函数
    	p->id = p->id^q->id;
    	q->id = p->id^q->id;
    	p->id = p->id^q->id;
    	char temp[1024];
    	strcpy(temp, p->name);
    	strcpy(p->name, q->name);
    	strcpy(q->name, temp);
    	for (int i = 0; i < 3; ++i) {
    		p->score[i] = p->score[i] ^ q->score[i];
    		q->score[i] = p->score[i] ^ q->score[i];
    		p->score[i] = p->score[i] ^ q->score[i];
    	}
    }
    void fun(stu* a, stu* b) {//合并并排序
    	stu* p;
    	for (p = a; p->next != NULL; p = p->next);//找到a的最后一个指针
    	p->next = b->next;//让它指向b
    	free(b);
    	for (p = a->next; p != NULL; p = p->next) { 
    		for (stu* q = p->next; q != NULL; q = q->next) { //
    			if (p->id > q->id) {
    				swap(p, q);
    			}
    		}
    	}
    }
    void main() {
    	int n, m;
    	printf("请输入链表a的长度\n");
    	scanf("%d", &n);
    	printf("请输入链表b的长度\n");
    	scanf("%d", &m);
    	printf("请输入链表a中的学生信息\n");
    	stu* a = creat(n);
    	printf("请输入链表b中的学生信息\n");
    	stu* b = creat(m);
    	printf("链表a学生信息\n学号\t姓名\t成绩1\t成绩2\t成绩3\n");
    	print(a);
    	printf("链表b学生信息\n学号\t姓名\t成绩1\t成绩2\t成绩3\n");
    	print(b);
    	printf("合并排序后为\n学号\t姓名\t成绩1\t成绩2\t成绩3\n");
    	fun(a, b);
    	print(a);
    	system("pause");
    }
    

    在这里插入图片描述 在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 要求把两个链表合并,按学号升序排列。 #include<stdio.h> #include<stdlib.h> #define N sizeof(struct student) typedef struct student { int num; char name[20]; float score[3]; float a
    //*作者:冰糖
    //*日期:2018年12月1日
    //*章节:第九章
    //*题号:10 
    //*题目:已有a,b两个链表,每个链表中的结点包括学号,成绩。要求把两个链表合并,按学号升序排列。 
    #include<stdio.h>
    #include<stdlib.h>
    #define N sizeof(struct student)
    typedef struct student
    {
    	int num;
    	char name[20];
    	float score[3];
    	float aver;
    	struct student *next;
    }STUD;
    int main()
    {
    	STUD *add(STUD *p1,STUD *p2);
    	STUD *lineA,*lineB,*lineC;
    	lineA=create();//省略create函数定义 
    	lineB=create();
    	lineC=add(lineA,lineB);
    	print(lineC);//省略print函数定义 
    	return 0;
    }
    STUD *add(STUD *p1,STUD *p2)
    {
    	STUD *pa,*pb;
    	pa=p1;
    	p1=p1_>next;
    	pa_>next=NULL;
    	while(p1!=NULL)
    	{
    		p2=p1;
    		p1=p1_>next;
    		insert(pa,pb); //省略函数定义 
    	}
    	while(p2!=NULL)
    	{
    		p1=p2;
    		p2=p2_>next;
    		insert(pa,pb); 
    	}
    	return pa;
    }
    
    展开全文
  • C语言-链表排序

    千次阅读 2019-05-13 20:00:54
    要求把两个链表合并,按学号升序排列。 输入 第一行,a、b两个链表元素的数量N、M,用空格隔开。 接下来N行是a的数据 然后M行是b的数据 每行数据由学号和成绩两部分组成 输出 按照学号升序排列的数据 样例输入 ...

    C语言-链表排序

    题目描述

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

    输入

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

    输出

    按照学号升序排列的数据

    样例输入

    2 3
    5 100
    6 89
    3 82
    4 95
    2 10

    样例输出

    2 10
    3 82
    4 95
    5 100
    6 89

    My first try on Linkedlist, quite hard for me at first
    especially the beginning part
    also pointer is a hard part for I havn’t understood yet
    BUT PRACTICE PAYS
    I finally get to know it

    #include<cstdio>
    #include<cstdlib>
    typedef struct student{//定义结构 
    	int num;
    	int sco;
    	struct student *next;
    }stu;
    
    stu *creat(int n){//创建链表 
    	stu *head,*node,*end;
    	head=(stu*)malloc(sizeof(stu));
    	end=head;
    	for(int i=0;i<n;i++){
    		node=(stu*)malloc(sizeof(stu));
    		scanf("%d %d",&node->num,&node->sco);
    		end->next=node;
    		end=node;
    	}
    	end->next=NULL;
    	return head;
    }
    
    stu *link(stu *a,stu*b)//链接 
    {
    	stu *p=a;
    	while(p->next!=NULL){
    		p=p->next;
    	}
    	p->next=b->next;
    	return a;
    }
    
    void linksort(struct student *p){//排序                
    	int tnum,tsco,k=0,i=1;
    	 
    	struct student *p1;
    	p1=p;
    	while(i!=0){
    	    while(p1->next!=NULL){
    	        if(p1->num>p1->next->num)  {
    	           tnum=p1->num;
    	           p1->num=p1->next->num;
    	           p1->next->num=tnum;
    	 
    	           tsco=p1->sco;
    	           p1->sco=p1->next->sco;
    	           p1->next->sco=tsco;
    	           k++;
    	        }
    	        p1=p1->next;
    	    }
    	    p1=p;
    	    if(k>0){
    			k=0;
    		}
    	    else i=0;
    	}
    }
    
    void print(stu *a)//输出 
    {
    	stu *p=a;
    	while(p->next!=NULL){
    		printf("%d %d\n",p->num,p->sco);
    		p=p->next;
    	}
    }
    int main()
    {
    	int n,m;
    	scanf("%d %d",&n,&m);
    	stu *a=creat(n);
    	stu *b=creat(m);
    	stu *p=link(a,b);
    	linksort(p);
    	print(p);
    	return 0;
    } 
    
    展开全文
  • 要求把两个链表合并,按学号升序排列。 输入: 第一行,a、b两个链表元素的数量N、M,用空格隔开。 接下来N行是a的数据 然后M行是b的数据 每行数据由学号和成绩两部分组成 输出: 按照学号升序排列的数据 样例...

    题目描述:

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

    输入:

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

    输出:

             按照学号升序排列的数据
    

    样例输入:

                                          2 3
                                          5 100
                                          6 89
                                          3 82
                                          4 95
                                          2 10
    

    样例输出:

                                          2 10
                                          3 82
                                          4 95
                                          5 100
                                          6 89
    

    分析:

         这个题的难点在于要熟悉链表的操作,而且要将排序和链表结合起来。我的思路是先创建链表,
         然后读取两个链表的数据,将两个链表合并成一个新的链表,然后用选择排序法将新的链表排序并输出。
    

    代码:

    #include<stdio.h>
    #include<stdlib.h>
    
    typedef struct st_data
    {
        int number;
        int score;
        struct st_data *next;
    }Data,*Datap;         // 定义结构体
    
    Datap creatlist(int length)      // creatlist函数用来创建链表,传入的参数为要创建的链表的长度
    {
        Datap head;        // 定义一个头指针
        Datap q;           // 用来遍历链表
        Datap list;        // 链表的结点
        int i = 0;
    
        head = (Datap)malloc(sizeof(Data));
        head->next = NULL;  // 创建头结点
        q = head;           // 指向头结点
        for(i = 0;i < length;i++)
        {
            list = (Datap)malloc(sizeof(Data));
            scanf("%d%d",&(list->number),&(list->score));  // 创建结点,并读取数据
            q->next = list;
            q = list;        // 连接结点
        }
        q->next = NULL;
    
        return head;        // 返回头结点
    }
    
    void sort_list(Datap list1,Datap list2,int length) // sort_list函数将链表排序,传入的参数为两个链表和两个链表的长度之和
    {
        Datap temp;         // 定义一个指针,用来存放两个链表
        Datap min;          // 定义一个指针指向最小学号
        Datap nowtemp;      // 定义一个指针指向目前temp的位置
        int minnumber = 0;
        int minscore = 0;
    
        temp = list1;
        list2 = list2->next;
        while(temp->next != NULL)
        {
            temp = temp->next;
        }
        temp->next = list2;
        temp = list1->next;   // 将两个链表合并存放在temp中
    
        while(temp != NULL)    // 用选择法排序,每次找出剩余最小的和前面的交换
        {
            nowtemp = temp;
            min = temp;
            min->number = temp->number;   // 先将第一个值当作最小的
            while(nowtemp != NULL)
            {
                if(nowtemp->number < min->number)
                {
                    min = nowtemp;
                }
                nowtemp = nowtemp->next;
            }       // 搜索出最小学号
            minnumber = min->number;
            min->number = temp->number;
            temp->number = minnumber;    // 将最小学号和前面的交换
            printf("%d ",temp->number);  // 输出最小学号
    
            minscore = min->score;
            min->score = temp->score;
            temp->score = minscore;      // 将最小学号的分数和前面的交换
            printf("%d\n",temp->score);  // 输出最小学号的分数
    
            temp = temp->next;             // 继续向下搜索
        }
    }
    
    int main50()
    {
        int length1 = 0;
        int length2 = 0;
        Datap list1;
        Datap list2;
    
        scanf("%d%d",&length1,&length2);
        list1 = creatlist(length1);      // 创建链表1
        list2 = creatlist(length2);      // 创建链表2
    
        sort_list(list1,list2,(length1 + length2));
        
        while(list1->next != NULL)
        {
            q = list1->next;
            free(list1);
            list1 = q;
        }
        free(list1);
        return 0;
    }
    
    
    展开全文
  • 要求把两个链表合并,按学号升序排列。 输入 第一行,a、b两个链表元素的数量N、M,用空格隔开。 接下来N行是a的数据 然后M行是b的数据 每行数据由学号和成绩两部分组成 输出 按照学号升序排列的数据 样例输...
  • 要求把两个链表合并,按学号升序排列。 输入 第一行,a、b两个链表元素的数量N、M,用空格隔开。 接下来N行是a的数据 然后M行是b的数据 每行数据由学号和成绩两部分组成 输出 按照学号升序排列的数据 样例输入 2 3 5....
  • 要求把两个链表合并,按学号升序排列。 Input 第一行,a、b两个链表元素的数量N、M,用空格隔开。 接下来N行是a的数据 然后M行是b的数据 每行数据由学号和成绩两部分组成 Output 按照学号升序排列的数据 Sample ...
  • 要求把两个链表合并,按学号升序排列。 Input 第一行,a、b两个链表元素的数量N、M,用空格隔开。 接下来N行是a的数据 然后M行是b的数据 每行数据由学号和成绩两部分组成 Output 按照学号升序排列的数据 Sample ...
  • 要求把两个链表合并,按学号升序排列。 Input 第一行,a、b两个链表元素的数量N、M,用空格隔开。接下来N行是a的数据然后M行是b的数据每行数据由学号和成绩两部分组成 Output 按照学号升序排列的数据 Sample Input...
  • 要求把两个链表合并,按学号升序排列。 输入 第一行,a、b两个链表元素的数量N、M,用空格隔开。 接下来N行是a的数据 然后M行是b的数据 每行数据由学号和成绩两部分组成 输出 按照学号升序排列的数据 样例输入 2 3 5 ...
  • 要求把两个链表合并,按学号升序排列。 输入: 第一行,a、b两个链表元素的数量N、M,用空格隔开。 接下来N行是a的数据 然后M行是b的数据 每行数据由学号和成绩两部分组成 输出: 按照学号升序排列的数据 样例输入: ...
  • 要求把两个链表合并,按学号升序排列。 输入 第一行,a、b两个链表元素的数量N、M,用空格隔开。 接下来N行是a的数据 然后M行是b的数据 每行数据由学号和成绩两部分组成 输出 按照学号升序排列的数据 样例输入 2 3 5 ...
  • 要求把两个链表合并,按学号升序排列。 输入 第一行,a、b两个链表元素的数量N、M,用空格隔开。 接下来N行是a的数据 然后M行是b的数据 每行数据由学号和成绩两部分组成 输出 按照学号升序排列的数据 样例输入 ...
  • 要求把两个链表合并,按学号升序排列。 输入描述 第一行,a、b两个链表元素的数量N、M,用空格隔开。 接下来N行是a的数据 然后M行是b的数据 每行数据由学号和成绩两部分组成 输出描述 按照学号升序排列的数据 样例...
  • 要求把两个链表合并,按学号升序排列。 输入格式 第一行,a、b两个链表元素的数量N、M,用空格隔开。 接下来N行是a的数据 然后M行是b的数据 每行数据由学号和成绩两部分组成 输出 按照学号升序排列的数据 样例...
  • C语言链表练习(2)

    2019-05-03 19:06:16
    已知有a,b两个链表,每个链表的结点包括学号,成绩,要求把两个链表合并起来,并按学号升序排列; 建立链表 以链表a为基础,像升序插入结点一样,将链表b中的每个结点学号进行比较,再插入 注意过程中的特殊位置...
  • 问题 B: C语言-链表排序 ...要求把两个链表合并,按学号升序排列。 输入 第一行,a、b两个链表元素的数量N、M,用空格隔开。 接下来N行是a的数据 然后M行是b的数据 每行数据由学号和成绩两部分组成 输出 ...
  • 《程序设计基础》上机实验报告学号:201420224912 姓名:...要求合并两个链表并按学号升序排列。1、实验内容:#include&lt;stdio.h&gt; #include&lt;malloc.h&gt; #define len sizeof(struct st...
  • 建立两个带头结点的学生链表,每个结点包含姓名,学号和成绩,链表都按学号升序排列,将它们合并成一个仍按学号升序排列的链表。 算法分析 用Merge函数合并链表 在函数中定义两个指针变量p.q,分别指向HA,HB两个...
  • 要求把两个链表合并,按学号升序排列。 2.第一行,a、b两个链表元素的数量N、M,用空格隔开。 接下来N行是a的数据 然后M行是b的数据 每行数据由学号和成绩两部分组成 3.按照学号升序排列的数据 我的代码:#...
  • 做了两个链表 每个节点内有一个学生的编号和成绩,现在要求把两个链表合并,然后按照学号升序排列 不知道为啥 第65行总是报错 我整了一个小时了 没发现哪里错了,貌似运行时候显示说我引用了一个不可以引用的地址?...
  • 问题 B: C语言-链表排序 时间限制:1 Sec内存...要求把两个链表合并,按学号升序排列。 输入 第一行,a、b两个链表元素的数量N、M,用空格隔开。 接下来N行是a的数据 然后M行是b的数据 每行数据由学号和成绩两部...
  • 参考这篇博客,写的非常清晰,太棒了。...3.如果数量也相同,则根据学号升序排列。 4.对于那些从来没有提交过任何可以通过编译器的解决方案的人,或者从来没有提交过任何解决方案的人,不显示在排序表...
  • 1)定义家庭住址结构体adress,包含成员有:省份、城市、街道;定义成绩结构体score,包含成员有:“C程序设计”、“Java程序设计”、“Basic成绩设计”的成绩;... 3)插入数据时学号要按照升序排列
  • 一 课程设计的内容 1 信息维护 要求 学生...要求 A 输入任意的一个课程名如数学和一个分数段如 60--70 统计出在此分 数段的学生情况 4 排序能对用户指定的任意课程名按成绩升序或降序排列学生数据并显示排序结果 使用

空空如也

空空如也

1 2
收藏数 37
精华内容 14
关键字:

学号升序排列c语言

c语言 订阅