无法理解排队功能中的逻辑
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.
}
}
我通过代码将元素插入队列,但我无法理解显示函数的工作原理
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.
}
}