无法理解入队函数中的逻辑

时间:2015-04-06 10:03:52

标签: c data-structures queue

我通过代码在队列中插入元素,但我无法理解show函数是如何工作的

void enqueue(int x)
{
  queue *ptr;
  queue *ptr1;
  ptr=(queue*)malloc(sizeof(queue));
  ptr->info=x;
  if(front==rear&&front==NULL)
  {
      ptr->next=NULL;
      front=rear=ptr;
  }
  else
    {
   while(rear->next!=NULL)
   {
       rear=rear->next;
   }
   rear->next=ptr;
   ptr->next=NULL;
  }
}

//由于前后之间没有链接,我无法理解前面的下一个指向队列中的下一个元素

 void show()
 {
  queue *ptr=front;
  while(ptr!=NULL)
   {
    printf("%d\n",ptr->info);
    ptr=ptr->next;
   }
}

2 个答案:

答案 0 :(得分:0)

  

前后之间没有联系

当然有 - 这是如何建立的:

if(front==rear&&front==NULL)
{
    ptr->next=NULL;
    front=rear=ptr;
}

front指向第一个插入的元素。最初,rear也指向相同的元素。当您向队列中添加更多元素时,rear会继续,而front仍然指向相同的初始元素。

show()接受该元素,并使用它遍历链表。

请注意,如果始终使用insert插入项目,则不需要while循环,因为rear->next!=NULL始终为“false”。

答案 1 :(得分:0)

这是您的代码,我正在评论您的代码正在做什么。

void enqueue(int x)
{
  queue *ptr;
  queue *ptr1;
  ptr=(queue*)malloc(sizeof(queue));  // allocating memory
  ptr->info=x;  // x is the value you are passing to ptr.
  if(front==rear&&front==NULL) //this work for the first time when list is empty
  {
      ptr->next=NULL;    //setting next location to null
      front=rear=ptr;    //till now only once value is there in the list so front=rear (both will be same) = ptr
  }
  else
  {
       while(rear->next!=NULL)  // while loop will run until end of the list reached
       {
           rear=rear->next;     // moving to next location
       }

   rear->next=ptr;     // after getting last location assign it to rear->next
   ptr->next=NULL;   // again make next loation null.
  }
}