C語言-迴圈隊列的簡單實現

來源:互聯網
上載者:User

用C語言實現一個迴圈隊列並不難。關鍵點在於對隊列 "空" 和 "滿" 狀態的判斷。

正如《C和指標》中所描寫的,有兩種方法來實現對隊列空和滿狀態的判斷。 在數組中空一個元素不填,起始時, 置tail為0, front為1, 這樣一來, 實現要浪費queue buffer中兩個元素空間: 隊列空:  (tail+1) % queue_size == front 隊列滿:  (tail+2) % queue_size == front 定義一個變數來記錄隊列中元素的個數, 判斷隊列的空和滿直接看變數的值即可

 

本文中使用的是第2種:

#include <stdio.h>#define QUEUE_SIZE          5#define QUEUE_TYPE          intstatic int queue_cnt = 0;static int queue_front = 0;static int queue_tail = 0;static QUEUE_TYPE queue_buf[QUEUE_SIZE];int is_empty(){    return queue_cnt == 0;}int is_full(){    return queue_cnt == QUEUE_SIZE;}int insert(QUEUE_TYPE e){    if (is_full()) {        printf("queue is full!!!\n");        return 0;    }    queue_buf[queue_tail] = e;    queue_tail = (queue_tail + 1) % QUEUE_SIZE;    queue_cnt++;    return 1;}int delete(){    if (is_empty()) {        printf("queue is empty!!!\n");        return 0;    }    queue_front = (queue_front + 1) % QUEUE_SIZE;    queue_cnt--;    return 1;}int main(){    insert(3);    insert(3);    insert(3);    insert(3);    insert(3);    delete();    insert(3);    insert(3);    return 0;}



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.