gpt4 book ai didi

c - 在链表的链表中插入元素

转载 作者:太空宇宙 更新时间:2023-11-04 02:21:24 24 4
gpt4 key购买 nike

我有以下结构:

typedef struct trans {
int code;
int issuersAccsID;
double amount;
int type;
char date [100];
int secondPartysId;
char description [41];
trans *next;
} transaction;


typedef struct acct{
int id;
char bank [50];
int type;
double balance;
acct *next;
transaction *tnext;
} account;


struct client{
int id;
char name [150];
char city [200];
char phone [30];
client *next;
account *anext;
};

当我在列表“clients”中插入元素时它工作正常,但问题是当我转到“子列表”时,因为它无限地插入最后一个元素。

void fileExists(client **p){
client *ax = new client, *t = *p;
scanf("%d",ax->id);
scanf("%s",ax->name);
ax->city="Example";
scanf("%s",ax->phone);
if (t==NULL)
*p=ax;
else{
/*Insert at the end of the list*/
t = *p;
ax->next = NULL;
while(t->next != NULL)
t=t->next;
t->next = ax;
}


/************************* ACCOUNTS ******************************/
scanf("%d",auxid);
scanf("%s",auxb);
scanf("%d",auxt);
scanf("%lf",auxbal);
/*Insert at the end of the list*/
ax->anext = new account;
t = *p;
t->anext = (*p)->anext;
ax->anext->id = auxid;
strcpy(ax->anext->bank,auxb);
ax->anext->type = auxt;
ax->anext->balance = auxbal;
ax->anext->next = NULL;
if (t->anext == NULL)
(*p)->anext = ax->anext;
else while(t->anext->next != NULL)
t->anext=t->anext->next;
t->anext->next = ax->anext;
}

为了更好地解释发生了什么,假设我们插入了 2 个客户端

客户 A:1. ID = 42.名字=弗兰克3.城市=例子4.电话=1111

客户 A 还有以下帐户

账户 A:1. ID = 33332.银行=例子3. 类型 = 24.余额=35.3

账户 B:1. ID = 44442.银行=考试3. 类型 = 14.余额=38.3

客户 B:1. ID = 62. 姓名 = 莱利3.城市=例子4. 电话 = 2222

客户 B 也有以下帐户

账户 A:1. ID = 66662.银行=前3. 类型 = 24.余额=77.3

账户 B:1. ID = 88882.银行= E3. 类型 = 14.余额=7542.3

账户 C:1. ID = 99982.银行=前3. 类型 = 24. 余额 = 752.63

当我在链接列表中完成插入时,客户 A 的帐户列表如下所示:

账户 B -> 账户 B -> 账户 B -> 账户 B (...) 不停。我该如何解决?

最佳答案

  1. 您在带有 newscanf 的代码中混合使用了 C++ 和 C 您可以使用 malloc,如下例所示

  2. 在结构声明中,给定的代码将无法编译。 trans *next; 应更改为 struct trans *next;。同样将acct *next;改为struct acct *next;

  3. 在客户端案例中,您还应该为案例 (t == NULL) 设置 ax->next = NULL

    <
  4. 为了插入帐户,我通过使用客户端案例中的 ax 变量修改了代码,如下所示。

    account * acc = malloc (sizeof (account));
    account * acc2;
    if (acc == NULL) { exit (1); } // or any other method to handle memory error

    scanf("%d",acc->code);
    scanf("%s",acc->bank);
    scanf("%d",acc->type);
    scanf("%lf",acc->balance);

    acc->next = NULL;

    if (ax->anext == NULL)
    {
    ax->anext = acc;
    }
    else
    {
    acc2 = ax->anext;
    while (acc2->next != NULL)
    {
    acc2 = acc2->next;
    }
    acc2->next = acc;
    }

关于c - 在链表的链表中插入元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57488447/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com