【问题标题】:Bubble sort Linked list C++冒泡排序 链表 C++
【发布时间】:2012-07-19 04:33:12
【问题描述】:

我在使用此代码时遇到问题。我很确定它正在交换中。

该行:curr->Data() = nextEl.Data() 给了我以下错误:

"表达式必须是可修改的左值"

感谢任何帮助。先感谢您。 这是我的冒泡排序算法的代码:

class Node
{
private:
    int data;
    Node* next;
public:
    Node() {};
    void Set(int d) { data = d;};
    void NextNum(Node* n) { next = n;};
    int Data() {return data;};
    Node* Next() {return next;};
};

class LinkedList
{
    Node *head;
public:
    LinkedList() {head = NULL;};
    virtual ~LinkedList() {};
    void Print();
    void AddToTail(int data);
    void SortNodes();
};


void LinkedList::SortNodes() 
{
Node *curr = head;
Node *nextEl = curr ->Next();
Node *temp = NULL;

if(curr == NULL)
    cout <<"There is nothing to sort..."<< endl;
else if(curr -> Next() == NULL)
    cout << curr -> Data() << " - " << "NULL" << endl;
else
{
    for(bool swap = true; swap;)
    {
        swap = false;
        for(curr; curr != NULL; curr = curr ->Next())
        {
            if(curr ->Data() > nextEl ->Data())
            {
                temp = curr ->Data();
                curr ->Data() = nextEl ->Data();          
                nextEl ->Data() = temp;
                swap = true;
            }
            nextEl = nextEl ->Next();
        }
    }
}
curr = head;
do
{
    cout << curr -> Data() << " - ";
    curr = curr -> Next();
}
while ( curr != NULL);
cout <<"NULL"<< endl;
}

【问题讨论】:

  • 您显示的代码甚至不包括您所说的导致错误的行。
  • 是的,这是因为我尝试修复它,但是这种类型的行会进入发生交换的第二个嵌套 for 循环的 if 语句中。
  • @malat 这个线程已有 2 年历史,您链接的线程已有 1 年历史......从技术上讲,一个与我的重复

标签: c++ sorting linked-list bubble-sort


【解决方案1】:

你做错了。您不能更改函数返回的临时变量的值。

但是你可以让它这样工作..

int& Data() {return data;};

虽然这不是一个好习惯。相反,只需使用您拥有的二传手..

curr->Set(nextEl->Data());

【讨论】:

  • 我刚试过这个,它给了我错误,对于“curr”它给我“表达式必须是可修改的左值”,对于“nextEL”它给我“表达式必须有类类型”
  • 您是否添加了&amp; 符号,如图所示?无论如何,第二种形式应该仍然有效。
  • 是的,我做到了,谢谢,我现在没有错误!但我认为我的循环是错误的......我遇到了一个 .exe 问题
  • @user1539252- 如果您将鼠标悬停在选票下方,您会看到一个复选标记。点击它。
【解决方案2】:

声明

curr->Data() = nextEl.Data();

永远不会工作,你正试图为函数的返回值分配一些东西。我不知道您是如何定义 Node 的,但您的意思可能类似于

curr->Data = nextEl.Data();

即,将某些内容分配给 Node 的成员。

【讨论】:

  • curr-&gt;Set(nextEl.Data()),显然
  • 请注意,如果函数返回引用,则分配给函数的返回值可以工作。这是否合适是完全不同的事情。
  • ups,我没有看到 Node 的定义是正确的 :) 是的,你是对的 Ben。
【解决方案3】:

改变

curr ->Data() = nextEl ->Data(); 
nextEl ->Data() = temp;

curr->Set(nextEl ->Data()); 
nextEl->Set(temp);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-04
    • 1970-01-01
    • 2011-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-20
    相关资源
    最近更新 更多