一、佇列定義:佇列是限定在一端進行插入,另一端進行刪除特殊線性表。
二、佇列基本操作:
入隊出隊
三、佇列例題:
1.例1:舞伴配對問題:
分析:這一題是一道經典的取模運算,每一次將編號往前加一位,到達n就取模。
#include
#include
#include
#include
int main()
return
0;}
2.集合的前n個元素:編乙個程式,按遞增次序生成集合m的最小的n個數,m的定義如下:
(1)數1屬於m;
(2)如果x屬於m,則y=2*x+1和z=3*x+1也屬於m;
(3)此外再沒有別的數屬於m。
分析:這一題可以用兩個陣列來存放有y和z產生而出的元素,再通過對比選出小的輸出:
#include
int a[100001],b[100001];
int main()
n--;
}return
0;}
3.約瑟夫問題(小型資料):
分析:這一題可以使用鏈式儲存結構,當你刪除乙個位置時,把後繼為它的後繼改為刪除位置的後繼即可:
#include
#include
#include
#include
int a[100001];
int main()
return
0;}
4.細胞個數問題:
分析:其實這一題與佇列並沒有什麼太大的關係,出題人可能是想通過廣搜的方式來解決,但完全不要用廣搜!
#include
#include
#include
#include
char s[1001][1001];
int a[1001][1001];
int main()
if(i!=n)scanf("\n");
}for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(a[i][j] && !a[i-1][j] && !a[i][j-1])ans++;
printf("%d\n",ans);
return0;}
/*4 10
0234500067
1034560500
2045600671
0000000089
*/
5.最少步數
分析:這一題才是真正的廣搜,我們通過建立狀態來新建資料節點,馬有8種方式,象有4種方式,所以這就是一道模版題目啊!
#include
#include
#include
#include
int a[100001],c[100001];
int b[101][101];
int ans[100001];
int wa1[9]=;
int lk1[9]=;
int wa2[5]=;
int lk2[5]=;
void bfs(int x,int y)
}for(k=1;k<=4;k++)
} }
} int main()
資料結構 二 (佇列)
在模擬實現 佇列前應先簡單的了解先佇列的一些特點 佇列是一種特殊的線性表,特殊之處在於它只允許在表的前端 front 進行刪除操作,而在表的後端 rear 進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。佇列中沒有元素時,稱為空佇列。佇列最大...
演算法與資料結構 二 佇列
佇列也是一種線性的資料結構,它與鍊錶的區別在於鍊錶可以在任意位置進行插入刪除操作,而佇列只能在一端進行插入,另一端進行刪除。它對應於現實世界中的排隊模型。佇列有兩種常見的實現方式 基於列表的實現和基於陣列的實現 基於鍊錶的佇列,我們需要儲存兩個指標,乙個指向頭節點,乙個指向尾節點。這種佇列不存在佇列...
資料結構5 佇列
5.1簡介 佇列 queue 和堆疊一樣是一種有序鍊錶,屬於抽象資料型別。不同在於是先進先出 first in,first out,fifo 堆疊只需要乙個top指標指向堆疊頂端即可,但是佇列必須使用front和rear兩個指標分別指向佇列的前端和尾端。基本操作 1 create 建立空佇列 2 a...