1175: 链表操作

题目描述

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

输入

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

输出

按照学号升序排列的数据

样例输入

2 35 1006 893 824 952 10

样例输出

2 103 824 955 1006 89

没想到吧,今天是双更!!!

链表操作,第一次做的时候我也蒙了,说到链表,我就想起其他语言中的列表了

不知为什么我又想到物理中的链表了。。。

我们先来了解一下链表

一、链表的概念

定义:

链表是一种物理存储上非连续,数据元素的逻辑顺序通过链表中的指针链接次序,实现的一种线性存储结构。

特点:

链表由一系列节点(链表中每一个元素称为节点)组成,节点在运行时动态生成 (malloc),每个节点包括两个部分:

一个是存储数据元素的数据域

另一个是存储下一个节点地址的指针域

举个例子

    typedef struct student{
     int num;
     char name[20];
     struct student *next;
     }STU;

这就是一个简单的链表

具体怎么使用可以看一下这个博客

https://blog.youkuaiyun.com/qq_61672347/article/details/125701955

我看了,我第一次做的时候也看了,没想到吧!

不多说了,又是刷题的日子,直接上AC代码

#include <stdio.h>
#include <malloc.h>
 
typedef struct Student
{
    int num;
    int grade;
    struct Student *next;
}*node,Node;
 
node a(int n);//创建链表
void sortf(node l1,node l2);//连接与排序
void print(node l);//输出
 void b(node l1,node l2)
{
    node q;
 
    q=l1;
    l2=l2->next;
 
    while(q->next!=NULL)
    {
        q=q->next;
    }
 
    q->next=l2;
    q=l1->next;
 
    node min,p;
    int t,n,g;
 
    while(q!=NULL)
    {
        p=q;
        t=p->num;
        min=p;
 
        while(p!=NULL)
        {
            if(p->num<t)
            {
                t=p->num;
                min=p;
            }
 
            p=p->next;
        }
 
        n=q->num;
        q->num=min->num;
        min->num=n;
        g=q->grade;
        q->grade=min->grade;
        min->grade=g;
        q=q->next;
    }
 
    print(l1);
}
int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
 
    node head1,head2;
    head1=a(n);
    head2=a(m);
 
    b(head1,head2);
 
    return 0;
}
 
node a(int n)
{
    node h;
    h=(node)malloc(sizeof(Node));
    h->next=NULL;
 
    node p1=h,p2;
 
    int i;
    for(i=0;i<n;i++)
    {
        p2=(node)malloc(sizeof(Node));
        scanf("%d%d",&p2->num,&p2->grade);
 
        p2->next=p1->next;
        p1->next=p2;
        p1=p2;
    }
 
    return h;
}
 

 
void print(node l)
{
    l=l->next;
    node q;
    while(l!=NULL)
    {
        printf("%d %d\n",l->num,l->grade);
        q=l;
        l=l->next;
 
        free(q);
    }
}

很《简单》吧!

记得点赞+关注哦

每天更新,不要错过(可能一天多更哦,因为已经开学了,忙起来了,有的时候没更新,敬请谅解)

### 关于 UniApp 框架推荐资源与教程 #### 1. **Uniapp 官方文档** 官方文档是最权威的学习资料之一,涵盖了从基础概念到高级特性的全方位讲解。对于初学者来说,这是了解 UniApp 架构技术细节的最佳起点[^3]。 #### 2. **《Uniapp 从入门到精通:案例分析与最佳实践》** 该文章提供了系统的知识体系,帮助开发者掌握 Uniapp 的基础知识、实际应用以及开发过程中的最佳实践方法。它不仅适合新手快速上手,也能够为有经验的开发者提供深入的技术指导[^1]。 #### 3. **ThorUI-uniapp 开源项目教程** 这是一个专注于 UI 组件库设计实现的教学材料,基于 ThorUI 提供了一系列实用的功能模块。通过学习此开源项目的具体实现方式,可以更好地理解如何高效构建美观且一致的应用界面[^2]。 #### 4. **跨平台开发利器:UniApp 全面解析与实践指南** 这篇文章按照章节形式详细阐述了 UniApp 的各个方面,包括但不限于其工作原理、技术栈介绍、开发环境配置等内容,并附带丰富的实例演示来辅助说明理论知识点。 以下是几个重要的主题摘选: - **核心特性解析**:解释了跨端运行机制、底层架构组成及其主要功能特点。 - **开发实践指南**:给出了具体的页面编写样例代码,展示了不同设备间 API 调用的方法论。 - **性能优化建议**:针对启动时间缩短、图形绘制效率提升等方面提出了可行策略。 ```javascript // 示例代码片段展示条件编译语法 export default { methods: { showPlatform() { console.log(process.env.UNI_PLATFORM); // 输出当前平台名称 #ifdef APP-PLUS console.log('Running on App'); #endif #ifdef H5 console.log('Running on Web'); #endif } } } ``` #### 5. **其他补充资源** 除了上述提到的内容外,还有许多在线课程视频可供选择,比如 Bilibili 上的一些免费系列讲座;另外 GitHub GitCode 平台上也有不少优质的社区贡献作品值得借鉴研究。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值