佇列(FIFO)先進先出
首先引用《啊哈演算法》中的一個題,背景就不說了。大體意思就是輸入一串數字首先將第一個數字刪除,然後將第二個數放在末尾。依次迴圈,最後按照刪除的順序,把這些數連起來。
這裡然後引入佇列這個概念,佇列是一種特殊的線性結構,只允許在佇列的首部進行刪除操作->出隊,而在尾部進行插入操作->入隊,當佇列為空時,稱為空佇列。
佇列的三個基本元素(一個數組,兩個變數)
其次說一下這個題的程式碼:
#include<iostream>
using namespace std;
int main()
{
int q[102]= {0,6,3,1,7,5,8,9,2,4},head,tail;
head=1;
tail=10;
while(head<tail)
{
cout<<q[head]<<" ";
head++;
q[tail]=q[head];
head++;
tail++;
}
return 0;
}
首先解釋一下程式碼的意思。第一步,定義一個頭部和尾部。第一個數是被刪除的,所以將第一個數輸出。其次,在佇列不是空佇列的前提下執行,將第一個數輸出後,頭部往後移動一位。然後再將頭部的值付給尾部,然後頭部再加1,然後再進行迴圈。直到為空佇列時停止。‘
一共有九個數(0不計算在內),定義尾部為第十位,這樣可以防止頭部和尾部重合時仍有數沒有輸出,這樣的話就可以直接當head和tail重合時,直接停止執行,而不會對結果有影響。
然後用結構體來做這個題
#include<iostream>
using namespace std;
struct queue
{
int data[1000];
int tail;
int head;
};
int main()
{
int i;
struct queue q;
q.head=1;
q.tail=1;
for(i=1; i<=9; i++)
{
cin>>q.data[q.tail];
q.tail++;
}
while(q.head<q.tail)
{
cout<<q.data[q.head]<<" ";
q.head++;
q.data[q.tail]=q.data[q.head];
q.tail++;
q.head++;
}
return 0;
}
一開始首先定義一個結構體, int data[1000];(陣列) int tail;(尾部) int head;(頭部)。然後就是輸入數字了,這個和第一種的方法相同,就不多進行贅述了。
不過用結構體有幾個注意點。1,當訪問結構體內部變數時,可以使用“.",這個小東西叫做成員運算子或者點號運算子。然後main函式裡面時,一定要注意一定要注意一定要注意帶上結構體,剛才在打的時候數組裡面總是忘記加上"q."這個一定要注意。