我通过代码在队列中插入元素,但我无法理解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;
}
}
答案 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.
}
}