Eswink Eswink
  • 首页
  • 网站公告
  • 红蓝对抗
    • 攻防对抗
    • 渗透分析
  • 资源分享
    • 代码发布
    • 其他分享
  • 本站专题
    • 视频集锦
    • WordPress
    • 工程实践
    • 奇闻趣事
    • 活动线报
  • 问答
  • 绿标域名
  • 关于本站
    • 友情链接
  • 注册
    登录
现在登录。
  • 首页
  • 网站公告
  • 红蓝对抗
    • 攻防对抗
    • 渗透分析
  • 资源分享
    • 代码发布
    • 其他分享
  • 本站专题
    • 视频集锦
    • WordPress
    • 工程实践
    • 奇闻趣事
    • 活动线报
  • 问答
  • 绿标域名
  • 关于本站
    • 友情链接
首页 代码发布 工程实践:模块化程序设计(4)

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

小伍同学 2021-06-06 17:40:21 本文共2495个字,预计阅读时间需要7分钟
1 星2 星3 星4 星5 星 (本文还未被点评)
Loading...

6-4 有序表合并-数组 (20 分)

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

——题目要求

函数接口定义:

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

裁判测试程序样例:

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

//Status 主要用于描述函数结果状态代码,如OK等
typedef int Status;

// ElemType为数据元素类型,根据实际情况而定,这里设为int
typedef int ElemType;

#define MAXSIZE 20          // 存储空间初始分配量 
typedef struct
{
    ElemType data[MAXSIZE];  // 数组,存储数据元素 
    int length;              // 表当前有效长度 
}SqList;                    //  SqList结构体类型 

/* 函数定义 */
void MergeList(SqList La,SqList Lb,SqList *Lc);
Status ListLength(SqList L);
Status GetElem(SqList L,ElemType i,ElemType *e);
Status ListInsert(SqList *L,ElemType i,ElemType e);
Status ListEmpty(SqList L);
Status input(SqList *L);  //无序输入,按升序形成有序数组
void output(SqList *L);

int main(void){
    SqList La ,Lb , Lc ;
    Lc.length=0;
    La.length=0;
    Lb.length=0; 
    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(SqList *L)
{
    ElemType i;
    if(ListEmpty(*L)==OK)
        printf("No Element!");
    else    
        for (i = 0; i < L->length; i++)
        {
            printf("%d ", L->data[i]);
        }
    printf("\n");
}

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

输入样例:

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

3 2 6 5 0
10 2 1 6 8 9 0

输出样例:

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

La: 2 3 5 6 
Lb: 1 2 6 8 9 10 
Lb+Lb: 1 2 2 3 5 6 6 8 9 10 

我的解答


/* 请在这里填写答案 */void MergeList(SqList La, SqList Lb, SqList* 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 ListLength(SqList L) {
    int i = 0;
    while (1)
    {
        if (L.data[i] == 0)
        {
            break;
        }
        i++;
    }
    return i;
}
Status GetElem(SqList L, ElemType i, ElemType* e) {//e来存放满足序号的值
    int t;
    if (L.length > 0 && i <= L.length)
    {
        *e = L.data[i - 1];
        return OK;
    }
    else
        return ERROR;
}
Status ListInsert(SqList* L, ElemType i, ElemType e) {
    (*L).data[i - 1] = e;
    (*L).length = i;
    return OK;
}
Status ListEmpty(SqList L) {
    if (L.length == 0)
        return OK;
    else
        return ERROR;
}
Status input(SqList* L) {
    int  i = 0;//计数
    while (1)
    {
        scanf("%d", &(*L).data[i]);
        if ((*L).data[i] == 0)
            break;//若是最后一个0 跳出循环
        i++;
    }
    (*L).length = i;
    int tmp;//临时变量
    int l;
    int j;//第二个计数
    for (l = 0; l < i - 1; l++)
        for (j = 0; j < i - 1 - l; j++)
            if ((*L).data[j] > (*L).data[j + 1])//交换数值 小的在前面
            {
                tmp = (*L).data[j];
                (*L).data[j] = (*L).data[j + 1];
                (*L).data[j + 1] = tmp;
            }
    return OK;
}//无序输入,按升序形成有序数组

运行截图

工程实践:模块化程序设计(4)图片
#pta#工程实践#程序设计
1
小伍同学
一个即将入土的程序猿
赞赏
小伍同学
评论 (0)
返回
    发表评论
猜你喜欢
  • 巧妙应用Docker运行HuggingFace
  • 如何利用GO中的泛型实现客户端分页API
  • 通用网盘下载链接检测_Serverless云函数应用
  • SpringCloud分布式组件之玩转Nacos
  • 页面优化:使用JS脚本实现页面链接预加载
小伍同学
一个即将入土的程序猿
130
文章
60
评论
169
获赞
小伍同学
13 2月, 2022
百度小程序开发日志:本站小程序正式上线
Copyright © 2020-2022 Eswink. Designed by nicetheme. 川公网安备 51012202000979号 | 蜀ICP备20002650号-6
当前线路为: 国内线路
本站已安全运行:
本站由酷盾安全提供高防CDN国际线路安全防护服务
友链: Eswink 信息笔记 网站目录 站长新动力 脚本挂机引流赚钱 勇康博客网 龙笑天下 HTTP代理 QYV企业商务咨询 镇北府博客 吾爱漏洞 祭夜の咖啡馆 杭州论坛 龙鳞收录网 KIENG博客 Hackyh‘Blog
在线客服
小伍同学
我们将会在24小时内回复您,如果有急事请联系QQ或者微信
12:01
您好,有任何疑问请与我们联系!
公众号

选择聊天工具: