資料結構(二) 佇列

2021-08-03 09:52:36 字數 1711 閱讀 3856

一、佇列定義:佇列是限定在一端進行插入,另一端進行刪除特殊線性表。

二、佇列基本操作:

入隊出隊

三、佇列例題:

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...