小孩報數(順序迴圈佇列版) (10 分

2021-09-13 20:12:40 字數 1605 閱讀 3180

有若干個小孩圍成一圈,現從指定的第1個開始報數,報到第 w個時,該小孩出列,然後從下乙個小孩開始報數,仍是報到w個出列,如此重複下去,直到所有的小孩都出列(總人數不足w個時將迴圈報數),求小孩出列的順序。 演算法要求:使用順序迴圈佇列來儲存所有小孩,報數時小孩出隊,未數到w時,接著入隊;數到w時,輸出小孩的名字,該小孩不再入隊,如此直到所有小孩出隊,隊列為空時停止報數。 請寫出順序迴圈佇列的所有基本操作。 說明 :參與報數遊戲的小孩人數不能超過10人。

資料結構與操作函式介面定義:

typedef char elemtype;

typedef struct // 順序迴圈佇列結點定義

sqqueue;

void initqueue(sqqueue *&q); //初始化佇列;

void destroyqueue(sqqueue *&q); //銷毀佇列;

bool queueempty(sqqueue *q); //判定隊列為空時返回true; 否則返回false;

bool enqueue(sqqueue *&q,elemtype *e); // e 入隊;成功入隊返回true; 否則返回false;

bool dequeue(sqqueue *&q,elemtype *&e); //出隊,返回出隊元素e,且成功出隊返回true,否則返回false;

裁判測試程式樣例:

#include #include #include #define maxsize 11

#define n 10

int main()

i=n-1;

while(!queueempty(q))

}destroyqueue(q);

}

輸入樣例:

第一行:報數w;

第二行:輸入若干小孩姓名,以空格符間隔,以字串「-1」結束輸入。 在這裡給出一組輸入。例如:

3

jenny mike lily tom yoyo -1

輸出樣例:

在這裡給出相應的輸出。例如:

lily

jenny

yoyo

mike

tom

以下是答案:

void initqueue(sqqueue *&q)

void destroyqueue(sqqueue *&q)

bool queueempty(sqqueue *q)

bool enqueue(sqqueue *&q, elemtype *e)

q->name[q->rear] = e;

q->rear=(q->rear+1)%maxsize;

return true;

}bool dequeue(sqqueue *&q, elemtype *&e)

e = q->name[q->front];

q->front = (q->front + 1) % maxsize;

return true;

}

**的內容可以參考李春葆的資料結構第五版教材101頁

小孩報數(順序迴圈佇列版) (10 分

有若干個小孩圍成一圈,現從指定的第1個開始報數,報到第 w個時,該小孩出列,然後從下乙個小孩開始報數,仍是報到w個出列,如此重複下去,直到所有的小孩都出列 總人數不足w個時將迴圈報數 求小孩出列的順序。演算法要求 使用順序迴圈佇列來儲存所有小孩,報數時小孩出隊,未數到w時,接著入隊 數到w時,輸出小...

迴圈報數(佇列版)

有 nn n 個小朋友做遊戲,他們的編號分別是 1,2,3.n1,2,3.n1,2,3.n。他們按照編號從小到大依次順時針圍成乙個圓圈,從第乙個小朋友開始從 11 1 報數,依次按照順時針方向報數 加一 報 mm m 的人會離開隊伍,然後下乙個小朋友會繼續從 11 1 開始報數,直到只剩乙個小朋友為...

順序佇列的假溢位及順序迴圈佇列的表示(C 版)

順序佇列的假溢位 按照前面所說的順序佇列的儲存方法 有可能造成 假溢位 這種溢位不是因為儲存空間不夠而溢位,而是經過多次插入和刪除操作引起的,像這種有儲存空間而不能進行插入的元素操作的溢位稱為 假溢位 為了避免順序佇列造成的 假溢位 現象,通常採用順序迴圈佇列來實現佇列的順序儲存。順序迴圈佇列的定義...