首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++排序结构链表

C++排序结构链表
EN

Stack Overflow用户
提问于 2015-04-01 15:27:53
回答 2查看 84关注 0票数 0

我正在进行一个项目,在这个项目中,我按照顺序将数据从文本文件导入到链接列表中,然后输出链接列表。但是,每当我输出链接列表时,我总是会得到文本文件中的最后一个条目,重复一遍又一遍。

结构如下:

代码语言:javascript
复制
struct account
{
    int accountNumber;
    double balance;
    string firstName;
    string lastName;

    account * next;
};

这是我在列表中添加节点的函数:

代码语言:javascript
复制
void insertAccountByAccountNumber(account * & H, account * n)
{
    if (H == NULL)
    {
        H = n;
        return;
    }
    if (H->accountNumber >= n->accountNumber)
    {
        n->next = H;
        H = n;
        return;
    }
    account * t1, *t2;
    t1 = H;
    t2 = H->next;
    while (t2 != NULL)
    {
        if (t2->accountNumber < n->accountNumber)
        {
            t1 = t2;
            t2 = t2->next;

        }
        else
        {
            n->next = t2;
            t1->next = n;
            return;
        }
        t1->next = n;
    }
}

下面是我从文本文件创建节点的代码:

代码语言:javascript
复制
account * head = NULL;

account * currentAccount = new account;

ifstream fin;
fin.open("record.txt");
while (fin >> accountNumberCheck)
{
    fin >> firstNameCheck;
    fin >> lastNameCheck;
    fin >> balanceCheck;
    currentAccount->accountNumber = accountNumberCheck;
    currentAccount->firstName = firstNameCheck;
    currentAccount->lastName = lastNameCheck;
    currentAccount->balance = balanceCheck;
    currentAccount->next = NULL;
    insertAccountByAccountNumber(* & head, currentAccount);
}

showAccounts(head);


fin.close();
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-01 16:11:09

如前所述,您需要为创建的每个数据条目分配额外的内存,并将其添加到链接列表中。如果您需要进一步改进,这里有一个:在传递指向函数的指针时,实际上不需要额外的'&‘符号,因为它已经是头数据的地址。尝试:

代码语言:javascript
复制
account * head = NULL;

ifstream fin;
fin.open("record.txt");
while (fin >> accountNumberCheck)
{
    fin >> firstNameCheck;
    fin >> lastNameCheck;
    fin >> balanceCheck;

    account * currentAccount = new account; // Allocate a new memory location for each data entry in the heap
    currentAccount->accountNumber = accountNumberCheck;
    currentAccount->firstName = firstNameCheck;
    currentAccount->lastName = lastNameCheck;
    currentAccount->balance = balanceCheck;
    currentAccount->next = NULL;
    insertAccountByAccountNumber(head, currentAccount);
}

showAccounts(head);


fin.close();

当然,函数头将是:

无效insertAccountByAccountNumber(帐户* H,帐户* n);

票数 0
EN

Stack Overflow用户

发布于 2015-04-01 15:33:07

您遇到的问题是,您只在while循环之外创建一个节点,并且每次迭代都要重用它。使用链接列表,每次插入到列表中时,都需要创建一个新元素。

Here是一个链接列表实现,它位于代码审查中,您可以查看它,以获得关于链接列表工作方式的一些指示。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29394857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档