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)。如果没有,则创建另一个小应用程序,对数组中的数字进行排序。将从该应用程序中学到的知识应用到这个更大的应用程序中。