Eswlnk Blog Eswlnk Blog
  • 资源
    • 精彩视频
    • 破解专区
      • WHMCS
      • WordPress主题
      • WordPress插件
    • 其他分享
    • 极惠VPS
    • PDF资源
  • 关于我
    • 论文阅读
    • 关于本站
    • 通知
    • 左邻右舍
    • 玩物志趣
    • 日志
    • 专题
  • 热议话题
    • 游戏资讯
  • 红黑
    • 渗透分析
    • 攻防对抗
    • 代码发布
  • 自主研发
    • 知识库
    • 插件
      • ToolBox
      • HotSpot AI 热点创作
    • 区块
    • 快乐屋
    • 卡密
  • 乱步
    • 文章榜单
    • 热门标签
  • 问答中心反馈
  • 注册
  • 登录
首页 › 代码发布 › 工程实践:模块化程序设计(3)

工程实践:模块化程序设计(3)

Eswlnk的头像
Eswlnk
2021-06-06 17:35:55
工程实践:模块化程序设计(3)-Eswlnk Blog
智能摘要 AI
本文介绍了如何通过链表实现两个有序表的合并。题目要求先分别输入两个无序的链表,然后将其转换为有序表,并最终合并成一个新的有序链表。提供了相关的函数接口定义,包括获取链表长度、插入元素、获取指定位置的元素以及输入和输出链表内容的功能。具体实现中,`MergeList`函数通过比较两个链表中的元素,依次将较小的元素插入到新链表中,直到所有元素都被处理完毕。`input`函数负责从用户输入中构建有序链表。最后,通过主函数调用这些函数来完成链表的输入、输出及合并操作。

6-3 有序表合并-链表 (20 分)

本题要求实现两个有序表的合并。先分别输入两个有序表(输入时不要求按有序顺序输入),然后将两个有序表进行合并,形成一个新表,表里数据按什序排序。

——题目要求

函数接口定义:

Status ListLength(LinkList L);
void MergeList(LinkList La,LinkList Lb,LinkList *Lc);
Status ListInsert(LinkList *L,Status i,Status e);
Status GetElem(LinkList L,int i,ElemType *e);
void input(LinkList *L); //无序输入,按升序形成有序表
void output(LinkList *L);

裁判测试程序样例:

#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0

//Status 主要用于描述函数结果状态代码,如OK等
typedef int Status;
// ElemType为数据元素类型,根据实际情况而定,这里设为int
typedef int ElemType;

struct LNode               // 结点定义 
{
    ElemType data;
    struct LNode *next;
};

typedef struct LNode * LinkList; // LinkList是一指针类型,描述表的头指针

 //相关函数定义
Status ListLength(LinkList L);
void MergeList(LinkList La,LinkList Lb,LinkList *Lc);
Status ListInsert(LinkList *L,Status i,Status e);
Status GetElem(LinkList L,int i,ElemType *e);
void input(LinkList *L);
void output(LinkList *L);


int main(void){
    LinkList La = NULL,Lb = NULL,Lc = NULL;
    Status i;
    ElemType *e;

    input(&La);input(&Lb);

      printf("La: ");output(&La);
    printf("Lb: ");output(&Lb);
    MergeList(La,Lb,&Lc);
    printf("Lb+Lb: ");output(&Lc);

    return 0;

}
void output(LinkList *L)
{
    LinkList fp = *L;
    if(fp==NULL)
    {
        printf("No Chain!");
    }
    else
        while(fp){
            printf("%d ",fp->data);
            fp = fp->next;
        }
    printf("\n");
}


/* 请在这里填写答案 */

输入样例:

在这里给出一组输入。例如:

1 3 2 5 4 6 0
4 6 9 8 7 0

输出样例:

在这里给出相应的输出。例如:

La: 1 2 3 4 5 6 
Lb: 4 6 7 8 9 
Lb+Lb: 1 2 3 4 4 5 6 6 7 8 9 

我的解答

Status ListLength(LinkList L) {
    LinkList p;
    int len = 0;
    for (p = L; p != NULL; p = p->next)
        len++;
    return len;
}
void MergeList(LinkList La, LinkList Lb, LinkList* Lc) {
    int k = 0;
    int La_len, Lb_len;
    int i, j;
    i = j = 1;
    La_len = ListLength(La);
    Lb_len = ListLength(Lb);
    int p1, p2;
    while (1)
    {
        if (i <= La_len && j <= Lb_len)
        {
            GetElem(La, i, &p1);
            GetElem(Lb, j, &p2);
            if (p1 <= p2)
            {
                k++;
                ListInsert(Lc, k, p1);
                ++i;
            }
            else
            {
                k++;
                ListInsert(Lc, k, p2);
                ++j;
            }
        }
        else
            break;
    }
    for (; i <= La_len; i++)//La
    {
        k++;
        GetElem(La, i, &p1);
        ListInsert(Lc, k, p1);
    }
    for (; j <= Lb_len; j++)//Lb
    {
        k++;
        GetElem(Lb, j, &p2);
        ListInsert(Lc, k, p2);
    }

}
Status ListInsert(LinkList* L, Status i, Status e) {
    LinkList head = *L;
    LinkList tail = *L;//初始化p1,p1指向L
    tail = (struct LNode*)malloc(sizeof(struct LNode));
    tail->data = e;
    tail->next = NULL;//初始化设置为NULL
    if (*L == NULL)
    {
        *L = tail;//L没有 则直接插入并返回OK
        return OK;
    }
    while (head->next != NULL && head != NULL)
    {
        head = head->next;
    }
    head->next = tail;//拼接
    return OK;
}
Status GetElem(LinkList L, int i, ElemType* e) {
    LinkList p;
    int t = 0;
    for (p = L; p != NULL; p = p->next)
    {
        t++;
        if (t == i)
        {
            *e = p->data;
            return OK;
        }
        if (t > i)
            break;
    }
    return ERROR;
}
void input(LinkList* L) {//已测试 无误
    int num;
    LinkList p1, p2 = NULL;
    scanf("%d", &num);
    while (num != 0)
    {
        p1 = (struct LNode*)malloc(sizeof(struct LNode));
        p1->data = num;
        p1->next = NULL;//初始化为NULL
        if (*L == NULL)
            *L = p1;//将申请好的地址传入L 进行链接
        else
            p2->next = p1;
        p2 = p1;
        scanf("%d", &num);
    }
    //排序 前提 L存在
    if (*L == NULL)
        return;
    else
    {
        LinkList p, head, tail;
        p = *L;
        tail = p->next;
        int i, j, l, tmp;
        i = j = 0;
        l = ListLength(*L);//L的长度
        for (i = 0; i < l - 1; i++)//遍历列表 然后按照升序排列
        {
            head = *L;
            for (j = 0; j < l - 1; j++,head=head->next)
            {
                p = head;
                tail = p->next;
                if (p->data > tail->data)//小的在前 大的在后
                {
                    tmp = p->data;
                    p->data = tail->data;
                    tail->data = tmp;
                }
            }
        }

    }

}//无序输入,按升序形成有序表

运行截图

工程实践:模块化程序设计(3)-Eswlnk Blog
本站默认网盘访问密码:1166
本站默认网盘访问密码:1166
pta工程实践程序设计
1
0
Eswlnk的头像
Eswlnk
一个有点倒霉的研究牲站长
赞赏
工程实践:模块化程序设计(2)
上一篇
工程实践:模块化程序设计(4)
下一篇

评论 (0)

请登录以参与评论
现在登录
    发表评论

猜你喜欢

  • 「日志记录」逆向必应翻译网页版API实现免费调用
  • 「代码分享」第三方平台VIP视频解析API接口
  • 「至臻原创」某系统网站登录功能监测
  • 「开发日志」在Vue3中如何为路由Query参数标注类型
  • 「其他分享」分享一个在Tun模式下可用的脚本
Eswlnk的头像

Eswlnk

一个有点倒霉的研究牲站长
1108
文章
319
评论
679
获赞

随便看看

Easywoole框架实战_封装批量更新数据ORM
2022-05-01 1:16:48
「代码分享」Nestjs与Prisma多环境变量文件解决方案
2023-12-29 0:15:28
「代码发布」Wegt执行错误指令不存在的解决办法
2022-08-15 23:17:12

文章目录

专题展示

WordPress53

工程实践37

热门标签

360 AI API CDN java linux Nginx PDF PHP python SEO Windows WordPress 云服务器 云服务器知识 代码 免费 安全 安卓 工具 开发日志 微信 微软 手机 插件 攻防 攻防对抗 教程 日志 渗透分析 源码 漏洞 电脑 破解 系统 编程 网站优化 网络 网络安全 脚本 苹果 谷歌 软件 运维 逆向
  • 首页
  • 知识库
  • 地图
Copyright © 2023-2025 Eswlnk Blog. Designed by XiaoWu.
本站CDN由 壹盾安全 提供高防CDN安全防护服务
蜀ICP备20002650号-10
页面生成用时 0.958 秒   |  SQL查询 36 次
本站勉强运行:
友情链接: Eswlnk Blog 网站渗透 倦意博客 特资啦!个人资源分享站 祭夜博客 iBAAO壹宝头条
  • WordPress142
  • 网络安全64
  • 漏洞52
  • 软件52
  • 安全48
现在登录
  • 资源
    • 精彩视频
    • 破解专区
      • WHMCS
      • WordPress主题
      • WordPress插件
    • 其他分享
    • 极惠VPS
    • PDF资源
  • 关于我
    • 论文阅读
    • 关于本站
    • 通知
    • 左邻右舍
    • 玩物志趣
    • 日志
    • 专题
  • 热议话题
    • 游戏资讯
  • 红黑
    • 渗透分析
    • 攻防对抗
    • 代码发布
  • 自主研发
    • 知识库
    • 插件
      • ToolBox
      • HotSpot AI 热点创作
    • 区块
    • 快乐屋
    • 卡密
  • 乱步
    • 文章榜单
    • 热门标签
  • 问答中心反馈