Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 链表中元素的更改顺序_C++ - Fatal编程技术网

C++ 链表中元素的更改顺序

C++ 链表中元素的更改顺序,c++,C++,我正在尝试使用简单的链表: struct index { struct index* next_element; int data; struct index* previous_element; } 就性能而言,改变元素顺序的最佳方法是什么? 例如,我有12345678,我需要1435678。一般来说很难判断。似乎您希望将元素4移动到元素1之后。您是否有这两个的索引*?或者你知道第四个元素必须移动两个地方吗?这显然会影响你必须做的列表行走的数量 一般来说,为了获得最大的效

我正在尝试使用简单的链表:

struct index
{
   struct index* next_element;
   int data;
   struct index* previous_element;
} 
就性能而言,改变元素顺序的最佳方法是什么?
例如,我有12345678,我需要1435678。

一般来说很难判断。似乎您希望将元素4移动到元素1之后。您是否有这两个的
索引*
?或者你知道第四个元素必须移动两个地方吗?这显然会影响你必须做的列表行走的数量

一般来说,为了获得最大的效率,您需要一个函数

void list_remove_unsafe_(index* i) {
  // These two have to change (minimum needed)
  i->previous_element->next_element = i->next_element;
  i->next_element->previous_element-> = i->previous_element;
  // We leave i itself unchanged (dangling)
}
以及后续行动

void list_insert_unsafe_(index* after, index* i) {
  // These four have to change (minimum needed)
  index* before = after->next_element;
  i->previous_element = after;
  i->next_element = before;
  before->previous_element = i;
  after->next_element = i;
}

这些操作是不安全的,因为它们会暂时使列表处于中断状态,并进行大量假设(例如,不检查列表的开始/结束)。这些需要特殊处理。对于基本操作,这6个指针写入是最小值。

您的重新排序标准是什么?如果不知道您想要的是哪种类型的重新排序,就很难提供帮助。那
索引
用词不当,因为它不是索引,而是列表节点。此外,在C++中,不需要用<代码>结构> <代码>(Stutt> index > NEXTURE元素,<代码> >代码>索引> PrimouuSyEngs<代码>。哦,回答你的问题:你交换指针。很难比这更快。这是索引,它只是一段简化的代码。索引后面的数据是一大串字符串。@qutron:您需要正确地@address注释回复,以便它们显示在您回复的回复选项卡上。(我只是偶然看到这个。)@qutron:它成功了!(欢迎光临。)