C++ 链接列表:以C+的物理和逻辑顺序显示列表+;

C++ 链接列表:以C+的物理和逻辑顺序显示列表+;,c++,C++,我试图弄清楚如何让我的链接列表以数字顺序显示数字变量。我知道我需要设置另一个空,但我无法按数字顺序设置它。以下是我的源代码: #include <iostream> struct node { int number; node *next; }; bool isEmpty(node *head); char menu(); void insertAsFirstElement(node *&head, node *&last, int number);

我试图弄清楚如何让我的链接列表以数字顺序显示数字变量。我知道我需要设置另一个空,但我无法按数字顺序设置它。以下是我的源代码:

#include <iostream>
struct node
{
    int number;
    node *next;
};
bool isEmpty(node *head);
char menu();
void insertAsFirstElement(node *&head, node *&last, int number);
void insert(node *&head, node *&last, int number);
void remove(node *&head, node *&last);
void showList(node *current);
void showLogic(node *current);

bool isEmpty(node *head)
{
    if (head == NULL)
        return true;
    else 
        return false;
}

char menu()
{
    char choice;
    cout << "Menu\n";
    cout << "1. Add an item.\n";
    cout << "2. Remove an item.\n";
    cout << "3. Show the list Physically.\n";
    cout << "4. Show the list Logically.\n";
    cout << "5. Exit.\n";

    cin >> choice;
    return choice;

}

void insertAsFirstElement(node *&head, node *&last, int number)
{
    node *temp = new node;
    temp->number = number;
    temp->next = NULL;
    head = temp;
    last = temp;
}

void insert(node *&head, node *&last, int number)
{
    if (isEmpty(head))
        insertAsFirstElement(head, last, number);
    else
    {
        node *temp = new node;
        temp->number = number;
        temp->next = NULL;
        last->next = temp;
        last = temp;
    }
}

void remove(node *&head, node *&last)
{
    if (isEmpty(head))
        cout << "The list is already empty.\n";
    else if (head == last)
    {
        delete head;
        head == NULL;
        last == NULL;
    }
    else
    {
        node *temp = head;
        head = head->next;
        delete temp;
    }
}

void showList(node *current)
{
    if (isEmpty(current))
        cout << "The list is empty\n";
    else
    {
        cout << "The list contains: \n";
        while(current != NULL)
        {
            cout << current->number << endl;
            current = current->next;
        }
    }
}

void showLogic(node *current)
{

}

int main()
{
    node *head = NULL;
    node *last = NULL;

    char choice;
    int number;

    do
    {
        choice = menu();
        switch(choice)
        {
        case '1': cout << "Please enter a number: ";
                  cin >> number;
                  insert (head,last,number);
                  break;
        case '2': remove(head,last);
                  break;
        case '3': showList(head);
                  break;
        case '4': 
            break;
        default: cout << "System Exit\n";
        }
    }
    while(choice != '5');

    system ("pause");
    return 0;
}
#包括
结构节点
{
整数;
节点*下一步;
};
布尔为空(节点*头部);
字符菜单();
void insertasfirstement(节点*&头部、节点*&最后一个、整数);
无效插入(节点*&头部、节点*&最后一个、整数);
无效删除(节点*&头部、节点*&最后);
无效显示列表(节点*当前);
无效显示逻辑(节点*当前);
bool isEmpty(节点*头)
{
if(head==NULL)
返回true;
其他的
返回false;
}
字符菜单()
{
字符选择;
cout-next=NULL;
最后->下一步=温度;
最后=温度;
}
}
无效删除(节点*&头部、节点*&最后)
{
如果(i空(头))
下一步;
删除临时文件;
}
}
无效显示列表(节点*当前)
{
如果(isEmpty(当前))

cout一种解决方案是对链表进行排序。最简单的方法是获取列表中的值,将其存储在容器中,然后对容器进行排序。由于不允许更改节点的顺序(保持物理顺序),因此这可能是显示已排序列表的最佳选择

首先,从头到尾遍历列表——showList()函数已经完成了大部分工作。如果是简单数组,请确保有足够的空间容纳所有元素,并跟踪元素的数量

然后取容器,使用任意数量的排序算法进行排序——最简单的是冒泡排序,然后将排序后的容器显示给用户


总而言之,实际上您并没有改变链表,甚至在很大程度上也没有使用链表。您所做的只是收集每个节点中的所有数据,将其放置在一个容器中,然后所有真正的排序工作从链表转移到容器中。

如果不进行排序,您将如何完成这项工作需要以某种方式对列表进行排序。这就是为什么我要问如何在void showLogic(node*current)中对void showList(node*current)的数字顺序进行排序。所以你的问题归结为“如何对链接列表进行排序”?我确信有很多点击。最简单的方法是将列表中的数值复制到数组中,对数组进行排序,然后显示数组。在
insert()中使用它时,
head
&
last
仍然为空
。不知道你在看什么?好的,但在代码格式中,我该怎么做?我知道你在说什么,但我在创建代码以逻辑方式生成列表时遇到困难。请简单开始。首先编写一个函数,遍历链表中的每个节点,并使用push_back()将其添加到向量中。检查该向量,查看它是否在循环后收集了所有整数。然后,您离完成工作还有三到四行代码(如果允许使用std::sort)。如果没有,则创建另一个小应用程序,对数组中的数字进行排序。将从该应用程序中学到的知识应用到这个更大的应用程序中。