2015-04-06 46 views
1

我通過代碼排在隊列中插入元素的邏輯,但我無法理解如何顯示功能工作無法理解排隊功能

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

有前部和後部之間沒有聯繫

當然有 - 這裏是它是如何建立的:

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

front指向第一個插入的元素。最初,rear也指向相同的元素。當您向隊列添加更多元素時,rear繼續前進,而front仍然指向相同的初始元素。

show()需要該元素,並用它遍歷鏈表。

請注意,如果項目總是使用insert插入,則while循環是不必要的,因爲rear->next!=NULL始終爲「false」。

+0

但是,在我已指定前置式>下將指向後方 – Newbie786 2015-04-06 10:13:22

+0

@ Newbie786在第二呼叫開始到插入'()','front'和'rear'指向相同的元件。當你在'rear-> next'插入一個元素時,'front-> next'也指向相同的元素,因爲'front == rear'。 – dasblinkenlight 2015-04-06 10:38:46

+0

好吧,現在我得到它 – Newbie786 2015-04-06 11:06:17

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

但如何顯示功能正在工作,因爲前後沒有鏈接 – Newbie786 2015-04-06 10:18:33