【问题标题】:Function to change information on a data structure (C)更改数据结构信息的函数 (C)
【发布时间】:2020-07-01 06:20:25
【问题描述】:

我目前正在为一个学校项目开发一个程序,它显示一个包含以下选项的菜单: 1-添加车辆; 2-更改有关车辆的信息 3-消除车辆; 4-列表列表。

这些天我可能会发一些垃圾邮件,因为这是一个价值 50% 的项目,而我离主要目标还很远

反正1和3都做完了。 4远未完成。 但我需要你对选项 2 兄弟的帮助。 当我写这篇文章时,我意识到我正在以二叉树模式开发这个程序,而我认为我应该使用链表

我现在要给你一些代码: 这不需要介绍

typedef struct Caravana
{
    char matricula[20];
    char marca[40];
    char modelo[45];
    char formato[20];
    int ano;
    int max_lugares;
    int area;
    int preco;
}CARAVANA;

然后,我们有一个在树上插入元素的函数

void inserirCaravana(NODO **raiz, CARAVANA newInfo)
{
    if (*raiz==NULL)
        {
            (*raiz)= criaElem(newInfo);
            return;
        }
    if (newInfo.matricula> (*raiz)->info.matricula)
        {
            inserirCaravana(&(*raiz)->direita, newInfo);
        }
    else
        {
            inserirCaravana(&(*raiz)->esquerda, newInfo);
        }

之后我们保留空间并完成元素

NODO *criaElem(CARAVANA newInfo)
{
    NODO *novo= NULL;
    novo=(NODO *) calloc(1,sizeof(NODO));
    if (novo==NULL)
        {
            printf("<<<<<Out of memory>>>>>\n");
        }
    else 
        {
            novo->info=newInfo;
            novo->direita=NULL;
            novo->esquerda=NULL;
        }
    return novo;
    
}

我正在考虑做一个 printf 来询问车牌,使用 strcmp,如果它没有找到它就可以返回,如果它找到我必须做正确的事情?强>

这就是你介入兄弟的地方,非常感谢你

【问题讨论】:

  • 很难回答,但是如果您知道如何删除和添加,可以通过删除以前的版本并添加新版本来完成更新。使用 malloc 代替 calloc,不要转换 calloc 或 malloc 的结果。

标签: c function data-structures


【解决方案1】:

看起来你已经根据它们的“matricula”制作了一个二叉树,我认为它的意思是“车牌”或“注册”。

您应该向用户询问他们想要更改的车辆的矩阵,然后在您的二叉树中搜索该记录。和插入一样,除了:

  • 该函数将返回NODO *Caravana *
  • 在右转 (direita) 或左转 (esquerda) 之前,首先检查当前车辆是否有您要查找的矩阵,如果有,请将其归还。
  • 如果您到达NULL 节点,只需返回NULL
  • 您可以只传递NODO * 而不是NODO **,因为您不必更新它。

找到要编辑的车辆后,您可以将字段值替换为用户输入的任何内容。但是,不要让用户更改矩阵字段,因为这会改变它应该在树中的位置。如果您必须让用户更改它,那么您应该从树中删除节点并使用新的矩阵值重新添加它。

您的插入功能存在几个问题:

  • 您正在使用&gt; 比较两个字符串。这在 C 中不起作用,请改用 strcmp
  • 您通过值传递 Caravana,因此每次函数调用自身时都会复制它。 在调用插入函数之前分配NODO结构,并将其作为NODO *传递会更有效。

【讨论】:

    猜你喜欢
    • 2014-05-29
    • 2012-06-08
    • 1970-01-01
    • 2021-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-07
    相关资源
    最近更新 更多