无法理解排队功能中的逻辑

Unable to understand the logic in enqueue function

我通过代码将元素插入队列,但我无法理解显示函数的工作原理

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;
  }
}

//因为front和rear之间没有link我无法理解next to front是如何指向队列中的下一个元素

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

there is no link between front and rear

当然有 - 这是它的建立方式:

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

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

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

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

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

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.
  }
}