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

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

Eswlnk的头像
Eswlnk
2021-06-06 17:27:04
工程实践:模块化程序设计(1)-Eswlnk Blog
智能摘要 AI
该题要求实现两个链表的合并,并在合并后的链表中删除指定位置的节点。具体步骤如下: 1. **输入链表**:分别输入两个链表 `La` 和 `Lb`,以 `0` 结束输入。 2. **合并链表**:将 `Lb` 中的新元素依次插入到 `La` 的尾部,确保不重复插入。 3. **删除节点**:根据用户输入的位置,删除合并后链表中的指定节点。如果删除位置无效,输出 "Position Error"。 ### 函数接口定义: - `Status ListLength(LinkList L)`:返回链表长度。 - `void Union(LinkList *La, Link

6-1 集合合并-(链表) (30 分)

先分别输入两个链表La,Lb的结点数据(0 结束链表输入,输入数据没有排序要求),Lb中出现的新元素插入依次到La的后面,然后输入删除结点的位置(指La,Lb合并后的链表中欲删除的结点)

函数接口定义:

 Status ListLength(LinkList L);
 void Union(LinkList *La,LinkList Lb);
 Status GetElem(LinkList L,int i,ElemType *e);
 Status ListEmpty(LinkList L);
 Status LocateElem(LinkList L,ElemType e,Status compare(ElemType a,ElemType b));  //compare是一个函数指针变量形参 
 Status equal(ElemType a,ElemType b);
 Status ListInsert(LinkList *L,Status i,Status e);
 Status ListDelete(LinkList *L,Status i,Status *e);  //删除位置不对,输出:Position Error
 void input(LinkList *L,char *str);

裁判测试程序样例:

#include
#include
#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; /* 表的头指针类型 */
 /*相关函数定义*/
 Status ListLength(LinkList L);
 void Union(LinkList *La,LinkList Lb);
 Status GetElem(LinkList L,int i,ElemType *e);
 Status ListEmpty(LinkList L);
 Status LocateElem(LinkList L,ElemType e,Status compare(ElemType a,ElemType b));  //compare是一个函数指针变量形参 
 Status equal(ElemType a,ElemType b);
 Status ListInsert(LinkList *L,Status i,Status e);
 Status ListDelete(LinkList *L,Status i,Status *e); //如果删除位置不存在,输出"Position Error\n"
 void input(LinkList *L);
 void output(LinkList *L);

 int main(void)
{
    LinkList La = NULL,Lb = NULL;
    Status i;
    ElemType *e;
    input(&La);input(&Lb);
    scanf("%d",&i);    

    Union(&La,Lb);output(&La);
    ListDelete(&La,i,e);output(&La);
    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:

先分别输入La,Lb链表(0结束输入),然后输入欲在合并后链表中删除的结点位置

1 2 3 0
4 5 6 0
4

输出样例1:

先输出合并后的链表,再输出在合并链表中删除结点后的链表

1 2 3 4 5 6 
1 2 3 5 6 

输入样例2:

先分别输入La,Lb链表(0结束输入),然后输入欲在合并后链表中删除的结点位置

1 2 3 0
3 4 5 6 0
8

输出样例2:

先输出合并后的链表,再输出在合并链表中删除结点后的链表

1 2 3 4 5 6 
Position Error
1 2 3 4 5 6 

我的解答

<span role="button" tabindex="0" data-code="Status ListLength(LinkList L) { LinkList p ; int len = 0; for (p = L; p != NULL; p = p->next) len++; return len; } void Union(LinkList* La, LinkList Lb) { int i; ElemType e; int La_len; int Lb_len; La_len = ListLength(*La); Lb_len = ListLength(Lb); for (i = 1; i
Status ListLength(LinkList L) {
    LinkList p ;
    int len = 0;
    for (p = L; p != NULL; p = p->next)
        len++;
    return len;
}
void Union(LinkList* La, LinkList Lb) {
    int i;
    ElemType e;
    int La_len;
    int Lb_len;
    La_len = ListLength(*La);
    Lb_len = ListLength(Lb);
    for (i = 1; i <= Lb_len; i++)
    {
        GetElem(Lb, i, &e);//取位置为i的元素赋值给e 
        if (!LocateElem(*La, e, equal))//判断La中 是否含有e 
            ListInsert(La, ++La_len, e);//将e插入到尾端 
    }
}
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;
}
Status ListEmpty(LinkList L) {
    if (L == NULL)
        return TRUE;
    else
        return FALSE;
}
Status LocateElem(LinkList L, ElemType e, Status compare(ElemType a, ElemType b))//compare是一个函数指针变量形参 
{
    LinkList s;
    s = L;
    if (s == NULL)
        return ERROR;//如果为NULL则无法定位序号
    for (; s != NULL; s = s->next)
    {
        if (compare(s->data, e))
            return OK;
    }
    return ERROR;
}
Status equal(ElemType a, ElemType b) {
    if (a == b)
        return TRUE;
    else
        return FALSE;
}
Status ListInsert(LinkList* L, Status i, Status e) {//将p2接到p1后面
    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 ListDelete(LinkList* L, Status i, Status* e) {//删除位置不对,输出:Position Error
    LinkList head = *L;
    LinkList tail = *L;//初始化p1,p1指向L
    int flag = 1;
    if (i == 1 && head != NULL)
    {
        *L = (*L)->next;//如果位置为1 则直接向前移动一个
        return OK;
    }
    for (; head != NULL; head = head->next)
    {
        if (flag >= i)
            break;
        tail = head;
        flag++;
    }
    if(head==NULL)
        printf("Position Error\n");
    else {
        tail->next = head->next;
        free(head);//移动后 释放节点
    }

}
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);
    }
}

运行截图

工程实践:模块化程序设计(1)-Eswlnk Blog
本站默认网盘访问密码:1166
本站默认网盘访问密码:1166
声明:本站原创文章文字版权归本站所有,转载务必注明作者和出处;本站转载文章仅仅代表原作者观点,不代表本站立场,图文版权归原作者所有。如有侵权,请联系我们删除。
pta工程实践程序设计
2
0
Eswlnk的头像
Eswlnk
一个有点倒霉的研究牲站长
赞赏
WordPress评论框添加UserAgent(浏览器和操作系统信息)
上一篇
工程实践:模块化程序设计(2)
下一篇

评论 (0)

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

猜你喜欢

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

Eswlnk

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

随便看看

「技术教程」免费的Let’s Encrypt证书
2024-01-11 20:20:42
页面优化:使用JS脚本实现页面链接预加载
2022-05-01 2:16:04
「代码发布」实现博客或第三方网站嵌入bilibili视频
2022-08-20 15:52:26

文章目录

专题展示

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.758 秒   |  SQL查询 42 次
本站勉强运行:
友情链接: Eswlnk Blog 网站渗透 倦意博客 特资啦!个人资源分享站 祭夜博客 iBAAO壹宝头条
  • WordPress142
  • 网络安全64
  • 漏洞52
  • 软件52
  • 安全48
现在登录
  • 资源
    • 精彩视频
    • 破解专区
      • WHMCS
      • WordPress主题
      • WordPress插件
    • 其他分享
    • 极惠VPS
    • PDF资源
  • 关于我
    • 论文阅读
    • 关于本站
    • 通知
    • 左邻右舍
    • 玩物志趣
    • 日志
    • 专题
  • 热议话题
    • 游戏资讯
  • 红黑
    • 渗透分析
    • 攻防对抗
    • 代码发布
  • 自主研发
    • 知识库
    • 插件
      • ToolBox
      • HotSpot AI 热点创作
    • 区块
    • 快乐屋
    • 卡密
  • 乱步
    • 文章榜单
    • 热门标签
  • 问答中心反馈