算法库应用- 表的自然链接

news2025/5/24 9:20:58

功  能: 设计算法,将两个单链表数组的特定位序, 相同者,链接起来
编程人: 王涛
详细博客:https://blog.csdn.net/qq_57484399/article/details/127161982
时  间: 2024.4.14
版  本: V1.0

V1.0

main.cpp

/*****************************************
功  能: 设计算法,将两个单链表数组的特定位序, 相同者,链接起来
编程人: 王涛
详细博客:https://blog.csdn.net/qq_57484399/article/details/127161982
时  间: 2024.4.14
版  本: V1.0
******************************************/
#include <stdio.h>
#include <malloc.h>

#define MaxCol 10

typedef int ElemType;

typedef struct dataNode
{
    ElemType date[MaxCol];  //存储数据的节点数组
    struct dataNode *next;     //定义节点的前驱指针
}DataList;

typedef struct headNode
{
    int row;    //头结点数据存储链表的 行数和列数
    int columns;
    DataList *next;  //头结点的后继指针类型是 DataList

}HeadList;


void CreatTable(HeadList *&new_table)
{
    int i,j;
    DataList *tailNode; //尾指针节点
    DataList *dataNode; //数据新节点
    new_table = (HeadList*)malloc(sizeof(HeadList));
    new_table->next = NULL;//基本头结点创建成功
    //下面分配行列数
    printf("请输入表的行数和列数:");
    scanf("%d%d",&new_table->row,&new_table->columns);
    //头结点基本创建完成

    //下面遍历输入数据节点
    for(i = 0;i < new_table->row; i++)
    {
        printf("请输入第%d行的数据:",i+1);
        //为每行数组分配空间
        dataNode = (DataList*)malloc(sizeof(DataList));
        for(j = 0;j < new_table->columns; j++)
        {
            scanf("%d",&dataNode->date[j]);
        }
        //数据填充完毕, 开始 尾插法插入头结点之后(head和data节点类型不一致,区分插入)
        if(new_table->next == NULL)
        {
            new_table->next = dataNode;
        }
        else
        {
            tailNode->next = dataNode;
        }
        tailNode = dataNode;    //尾结点指向新节点
    }
     //尾指针置空
    tailNode->next = NULL;
}
/*****************************************
    //定义指针指向数据节点

    //while(数据节点不为空){


        //()for循环遍历数组

        //遍历完指针后移
    //}
    //记得换行回车
******************************************/
void DisplayTable(HeadList *showTable)
{
    int i;
    //定义指针指向数据节点
    dataNode *nowNode = showTable->next;
    //while(数据节点不为空){
    printf("\n");
    while(nowNode != NULL)
    {
        //()for循环遍历数组
        for(i = 0; i < showTable->columns; i++)
        {
            printf("%2d",nowNode->date[i]);
            printf(" ");
        }
        //记得换行回车
        printf("\n");
        printf("\n");
        //遍历完指针后移
        nowNode = nowNode->next;
    }

}



void LinkTable(HeadList *first_table,HeadList *second_table,HeadList *&result_table)
{
    DataList *firstNode;
    DataList *secondNode;
    DataList *newNode;
    DataList *tailNode;
    int connect_table1,connect_table2;
    int serial_number;  //数组序号
    //result_table 头节点建立好 (列 = first_table->columns + second_table->columns),行不确定
    result_table = (HeadList*)malloc(sizeof(HeadList));
    result_table->columns = first_table->columns + second_table->columns;
    result_table->row = 0;  //目前是0
    //然后头结点next置空
    result_table->next = NULL;
    //while 遍历 first_table每个节点 ,
    firstNode = first_table->next;
    secondNode = second_table->next;

    printf("表1连接的数组位序:");
    scanf("%d",&connect_table1);
    getchar();getchar();
    printf("表2连接的数组位序:");
    scanf("%d",&connect_table2);

    while(firstNode != NULL)
    {
            secondNode = second_table->next;//每次都重新遍历
            //拿first_table一个节点 遍历 second_table的所有节点
            while(secondNode != NULL)
            {
                //判断特定行,特定列, 相等,则链接相关数组for循环
                if(secondNode->date[connect_table2-1] == firstNode->date[connect_table1-1])
                {
                    newNode = (DataList*)malloc(sizeof(DataList));
                    //连接两数组(first先, second后)
                    for(serial_number = 0; serial_number < first_table->columns;serial_number++)
                    {
                        newNode->date[serial_number] = firstNode->date[serial_number];
                    }
                    for(serial_number = 0;serial_number < second_table->columns;serial_number++)
                    {
                        newNode->date[(first_table->columns)+serial_number] = secondNode->date[serial_number];
                    }
                    if(result_table->next == NULL)
                    {
                        result_table->next = newNode;
                    }
                    else
                    {
                        tailNode->next = newNode;
                    }

                    tailNode =  newNode;
                    result_table->row++;
                    //尾插法插入result_table后
                }
                secondNode = secondNode->next;
            }
            firstNode = firstNode->next;
    }
    //result_table尾结点 置空
    tailNode->next = NULL;
}

int main()
{

    HeadList *first_table;  //代表要处理第一个表
    HeadList *second_table; //代表第要处理二个表
    HeadList *result_table;  //两个表处理后,存储结果的表C


    printf("表1:\n");
    //用头结点建表
    CreatTable(first_table);
    printf("表2:\n");
    //头结点建表
    CreatTable(second_table);

    //处理两个表
    LinkTable(first_table,second_table,result_table);


    DisplayTable(result_table);
    return 0;
}


v1.0运行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1593499.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

学浪视频怎么缓存?

缓存学浪视频轻而易举&#xff01;推荐使用“小浪助手”&#xff0c;一款便捷的工具&#xff0c;助你轻松实现。工具已经预先打包好&#xff0c;需要的朋友可以自行下载。快试试&#xff0c;畅享学习吧&#xff01; 学浪下载器链接&#xff1a;https://pan.baidu.com/s/1y7vcq…

【C++学习】深入理解C++异常处理机制:异常类型,捕获和处理策略

文章目录 ♫一.异常的提出♫二.异常的概念♫三.异常的使用♫3.1 异常的抛出和捕获♫3.2.异常的重新抛出♫3.3异常安全♫3.4 异常规范 ♫4.自定义异常体系♫5.C标准库的异常体系♫6.异常的优缺点 ♫一.异常的提出 之前&#xff1a; C语言传统的处理错误的方式与带来的弊端&…

【C++庖丁解牛】底层为红黑树结构的关联式容器--哈希容器(unordered_map和unordered_set)

&#x1f341;你好&#xff0c;我是 RO-BERRY &#x1f4d7; 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f384;感谢你的陪伴与支持 &#xff0c;故事既有了开头&#xff0c;就要画上一个完美的句号&#xff0c;让我们一起加油 目录 1. unordered系列关联式容…

多语言婚恋交友APP开发流程一览

近年来&#xff0c;随着全球化的发展和人们对跨文化交流的需求增加&#xff0c;多语言婚恋交友APP的需求逐渐增长。开发这类APP需要考虑到不同语言和文化下用户的需求&#xff0c;涉及到一系列独特的流程和挑战。本文将从专家角度为您解析多语言婚恋交友APP的开发流程&#xff…

GPT演变:从GPT到ChatGPT

Transformer 论文 Attention Is All You Need The dominant sequence transduction models are based on complex recurrent or convolutional neural networks in an encoder-decoder configuration. The best performing models also connect the encoder… https://arxiv.o…

一文理解java多线程之生产者消费者模型(三种实现)

生产者消费者模型 本文目录 生产者消费者模型基本介绍实现思路synchronized wait notify实现缓冲区生产者消费者测试代码思考 lock condition实现缓冲区生产者、消费者、测试代码 阻塞队列实现缓冲区生产者、消费者、测试代码思考 总结 基本介绍 什么是生产者消费者模型&am…

mybatis实体中时间类型LocalDateTime,查询的时候报错

问题描述 Spring boot集成mybatis实体中时间类型LocalDateTime&#xff0c;查询的时候报错 Error attempting to get column create_time from result set. Cause: java.sql.SQLFeatureNotSupportedException原因分析&#xff1a; 因为mybatis和druid的依赖版本兼容问题导致…

DHCP是什么意思 路由器中DHCP服务器怎么设置?

概述 DHCP是什么意思&#xff1f;很多朋友在路由器设置中&#xff0c;都会看到有一项“DHCP服务器”设置功能&#xff0c;而很多朋友对这个功能不太了解&#xff0c;也不知道怎么设置。其实&#xff0c;对于普通用户来说&#xff0c;无需去单独设置路由器DHCP服务器功能&#…

transformer在生物基因DNA的应用:DNABERT、DNABERT-2

参考&#xff1a; https://www.youtube.com/watch?vmk-Se29QPBA&t1388s 写明这些训练模型可以最终训练好可以进行DNA特征向量的提取&#xff0c;应用与后续1、DNABERT https://github.com/jerryji1993/DNABERT 主要思路就是把DNA序列当成连续文本数据&#xff0c;直接用…

【鸿蒙开发】第二十一章 Media媒体服务(一)

1 简介 Media Kit&#xff08;媒体服务&#xff09;提供了AVPlayer和AVRecorder用于播放、录制音视频。 在Media Kit的开发指导中&#xff0c;将介绍各种涉及音频、视频播放或录制功能场景的开发方式&#xff0c;指导开发者如何使用系统提供的音视频API实现对应功能。比如使用…

自己动手封装axios通用方法并上传至私有npm仓库:详细步骤与实现指南

文章目录 一、构建方法1、api/request.js2、api/requestHandler.js3、api/index.js 二、测试方法1、api/axios.js2、main.js3、app.vue4、vue.config.js5、index.html 三、打包1、配置package.json2、生成库包3、配置发布信息4、发布 四、使用1、安装2、使用 五、维护1、维护和…

基于STC12C5A60S2系列1T 8051单片机的带字库液晶显示器LCD12864数据传输并行模式显示图像应用

基于STC12C5A60S2系列1T 8051单片机的液晶显示器LCD12864显示图像应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍液晶显示器LCD12864简单介绍一、LCD12864点阵型液…

react17+18 中 setState是同步还是异步更新

在类组件中使用setState&#xff0c;在函数式组件中使用hooks的useState。 setstate目录 1. 类组件1.1 react 17版本1.2 react 18版本 2、函数式组件 1. 类组件 1.1 react 17版本 参考内容&#xff1a;第十一篇&#xff1a;setState 到底是同步的&#xff0c;还是异步的&…

使用UDP实现TCP的功能,会带来什么好处?

比较孤陋寡闻&#xff0c;只知道QUIC TCPQUIC握手延迟TCP需要三次握手TLS握手三次握手TLS握手放在一起&#xff0c;实现0RTT头阻塞问题TCP丢失保文&#xff0c;会影响所有的应用数据包基于UDP封装传输层Stream&#xff0c;Stream内部保序&#xff0c;Stream之间不存在相互影响…

halcon-轴断面检测定位

前言 通常情况下轴检测时&#xff0c;通常会检测轴的各个阶段的长度。但是由于各种原因&#xff0c;在轴断面的区域现实不明显&#xff0c;无法正确提取&#xff0c;这时候需要根据轴断面的突出部分进行检测&#xff0c;但是由于部分轴的粗轴和细轴区域的宽度差距相当接近&…

Linux部署自动化运维平台Spug

文章目录 前言1. Docker安装Spug2 . 本地访问测试3. Linux 安装cpolar4. 配置Spug公网访问地址5. 公网远程访问Spug管理界面6. 固定Spug公网地址 前言 Spug 面向中小型企业设计的轻量级无 Agent 的自动化运维平台&#xff0c;整合了主机管理、主机批量执行、主机在线终端、文件…

C/C++基础----常量和基本数据类型

HelloWorld #include <iostream>using namespace std;int main() {// 打印cout << "Hello,World!" << endl;return 0; }c/c文件和关系 c和c是包含关系&#xff0c;c相当于是c的plus版本c的编译器也可以编译c语言c文件.cpp结尾.h为头文件.c为c语言…

C++中的STL——list类的基本使用

目录 list类介绍 list类定义 list类常见构造 list类的有效元素个数操作 size()函数 list遍历操作 list元素修改操作 assign()函数 push_front()函数 push_back()函数 pop_front()函数 pop_back()函数 insert()函数 erase()函数 swap()函数 resize()函数 clear…

Mac环境 llamafile 部署大语言模型LLM

文章目录 Github官网本地部署 llamafile 是一种可在你自己的电脑上运行的可执行大型语言模型&#xff08;LLM&#xff09;&#xff0c;它包含了给定的开放 LLM 的权重&#xff0c;以及运行该模型所需的一切。让人惊喜的是&#xff0c;你无需进行任何安装或配置。 Github https…

CSS3新增

一些CSS3新增的功能 课程视频链接 目录 CSS3概述私有前缀长度单位remvwvhvmaxvmin 颜色设置方式rgbahslhsla 选择器动态伪类目标伪类语言伪类UI伪类结构伪类否定伪类伪元素 盒子属性box-sizing问题插播 宽度与设置的不同 resizebox-shadowopacity 背景属性background-originb…