【问题标题】:Linked List: How to Sort Doubly Linked List?链表:如何对双向链表进行排序?
【发布时间】:2017-03-29 07:14:34
【问题描述】:

这是我的双向链表的代码。它工作正常。我需要帮助来排序这个链表的数据元素。

#include <stdio.h>
#include <stdlib.h>

struct Node{
int data;
struct Node* next;
struct Node* prev;
};
struct Node* head;//global variable

int GetNewNode(int x)
{
struct Node* newNode=(struct Node*)malloc(sizeof(struct Node));
newNode->data=x;
newNode->prev=NULL;
newNode->next=NULL;
return newNode;
}

int InsertAtHead(int x)
{
struct Node* newNode =GetNewNode(x);
if(head==NULL)//list empty
{
    head=newNode;
    return;
}
head->prev=newNode;
newNode->next=head;
head=newNode;
}

void print()
{
struct Node* temp=head;//start printing from head
printf("Forward: ");
while(temp!=NULL)
{
    printf("%d ",temp->data);
    temp=temp->next;
}
    printf("\n");
}

   int main()
   {
   head=NULL;// initially taking it as null
   InsertAtHead(2);print();
   InsertAtHead(5);print();
   InsertAtHead(3);print();
   InsertAtHead(9);print();

   return 0;
   }

我想在这里对数据元素进行排序。 我试过这个:

void sort()
{
struct Node* temp=head;
int numTemp;
while(temp!=NULL)
{
    if(temp->prev > temp->next)
    {
        numTemp=temp->next;
        temp->next= temp->prev;
        temp->prev=numTemp;
    }
}
}

但这比较的是地址,而不是链表的数据,我如何比较数据并相应地对它们进行排序?

【问题讨论】:

  • 访问数据...temp-&gt;prev-&gt;data等等。只是不要取消引用任何 NULL 指针。

标签: c data-structures linked-list doubly-linked-list


【解决方案1】:

head,nextprec 在您的 Node 结构中是指针,因此,它们将仅指向相应的节点,与 temp(在 sort() 函数中)的方式相同指向您当前正在访问的节点的指针。

要访问temp 指向的节点的data,您将执行temp-&gt;data。同样,如果你想访问下一个节点(地址为temp-&gt;next)的数据,你会做temp-&gt;next-&gt;data

看来,遍历链表也有问题。 要在链表中向前迭代,您必须使temp 指向下一个节点。

while(temp!=NULL)
{
    ...
    temp=temp->next;
}

这就是您可以遍历列表的方式。

【讨论】:

  • 如何获取临时存储第一个节点的数据。因为为了比较我需要从第一个节点开始。
  • 能否请您编写sort()函数的代码,以解释您的观点。
  • @harsher Manan 的回答非常清楚。很难想象有任何方式可以更清楚或更好地解释它。实现它意味着需要进行一些编辑以放入该间接然后重新测试。你应该做这项工作。
  • @harsher 排序的方式几乎与对数字数组进行排序的方式相同,有多种算法。如果您不知道该怎么做,请查看它们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-07
  • 2016-06-19
  • 2011-02-25
  • 1970-01-01
  • 1970-01-01
  • 2017-03-22
相关资源
最近更新 更多