国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

九、數(shù)據(jù)結(jié)構(gòu)——順序隊(duì)列中的循環(huán)隊(duì)列

這篇具有很好參考價(jià)值的文章主要介紹了九、數(shù)據(jù)結(jié)構(gòu)——順序隊(duì)列中的循環(huán)隊(duì)列。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

一、循環(huán)隊(duì)列的定義
二、循環(huán)隊(duì)列的實(shí)現(xiàn)
三、循環(huán)隊(duì)列的基本操作

  • ①初始化
    ②判空
    ③判滿
    ④入隊(duì)
    ⑤出隊(duì)
    ⑥獲取長度
    ⑦打印

四、循環(huán)隊(duì)列的應(yīng)用
五、全部代碼

數(shù)據(jù)結(jié)構(gòu)中的循環(huán)隊(duì)列

在數(shù)據(jù)結(jié)構(gòu)中,隊(duì)列(Queue)是一種常見的線性數(shù)據(jù)結(jié)構(gòu),遵循先進(jìn)先出(First In First Out,F(xiàn)IFO)的原則。循環(huán)隊(duì)列是隊(duì)列的一種變體,它可以更高效地利用存儲空間,并解決了普通隊(duì)列可能出現(xiàn)的假溢出問題。本篇博客將詳細(xì)介紹循環(huán)隊(duì)列的定義、實(shí)現(xiàn)和基本操作。
九、數(shù)據(jù)結(jié)構(gòu)——順序隊(duì)列中的循環(huán)隊(duì)列,數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),鏈表,c語言,算法

一、 循環(huán)隊(duì)列的定義

循環(huán)隊(duì)列是通過數(shù)組或鏈表實(shí)現(xiàn)的一種隊(duì)列,它將隊(duì)列的首尾相連,形成一個(gè)循環(huán)。在循環(huán)隊(duì)列中,隊(duì)尾指針(rear)可能在隊(duì)列的前面,隊(duì)頭指針(front)可能在隊(duì)列的后面。當(dāng)隊(duì)列為空時(shí),front和rear指向同一個(gè)位置。當(dāng)隊(duì)列滿時(shí),front和rear之間有一個(gè)空位。

二、循環(huán)隊(duì)列的實(shí)現(xiàn)

我們可以通過數(shù)組來實(shí)現(xiàn)循環(huán)隊(duì)列。為了更好地利用存儲空間,通常會預(yù)留一個(gè)位置來區(qū)分隊(duì)列是空還是滿。具體來說,我們需要定義一個(gè)固定大小的數(shù)組和兩個(gè)指針front和rear來表示隊(duì)頭和隊(duì)尾。

typedef int TypeData;
typedef struct Node{
    TypeData *data;
    int front;
    int rear;
    int len;
}Queue,*Pqueue;

三、循環(huán)隊(duì)列的基本操作

①初始化隊(duì)列

Pqueue init_queue(Pqueue *queue, int m){
    *queue = (Pqueue)malloc(sizeof(Queue));
    if(*queue == NULL){
        return NULL;
    }
    (*queue)->data = (TypeData *)malloc(sizeof(Queue) * m);
    (*queue)->front = (*queue)->rear= 0;
    (*queue)->len = m;
    return *queue;
}

②判空

int isEmpty(Pqueue queue){
    return queue->front == queue->rear;
}

③判滿

int full(Pqueue queue){
    return (queue->rear+1) % (queue->len) == (queue->front);
}

④入隊(duì)

int queue_en(Pqueue queue, TypeData value){
    if(full(queue)){
        return -1;
    }
    queue->data[queue->rear] = value;
    queue->rear = (queue->rear+ 1) % (queue->len);
    return 0;
}

⑤出隊(duì)

TypeData queue_de(Pqueue queue){
    if(isEmpty(queue)){
        return -1;
    }
    TypeData temp = queue->data[queue->front];
    queue->front = (queue->front + 1) % (queue->len);
    return temp;
}

⑥獲取隊(duì)列長度

int get_length(Pqueue queue){
#if 0
    int a = queue->rear - queue->front;
    if(a >= 0){
        return a;
    }else{
        return (a + queue->len) % (queue->len);
    }
#else 
    return (queue->rear - queue->front + queue->len) % queue->len;
#endif
}

⑦打印

void show(Pqueue queue){
    for(int i = queue->front; i != queue->rear; i = (i + 1) % queue->len){
        printf("%d ",queue->data[i]);
    }
    printf("\n");
}

四、循環(huán)隊(duì)列的應(yīng)用

循環(huán)隊(duì)列常用于解決生產(chǎn)者-消費(fèi)者問題,以及在需要定期緩存數(shù)據(jù)時(shí)。它還在計(jì)算機(jī)操作系統(tǒng)的進(jìn)程調(diào)度中得到廣泛應(yīng)用,用于管理就緒隊(duì)列。循環(huán)隊(duì)列的高效性和簡單性使其成為許多問題的理想解決方案。

五、全部代碼

①seqqueue.h

#ifndef _SEQQUEUE_H_
#define _SEQQUEUE_H_
#include <stdio.h>
#include <stdlib.h>

typedef int TypeData;
typedef struct Node{
    TypeData *data;
    int front;
    int tail;
    int len;
}Queue,*Pqueue;

Pqueue init_queue(Pqueue *queue, int m);

int isEmpty(Pqueue queue);

int full(Pqueue queue);

int get_length(Pqueue queue);

int queue_en(Pqueue queue, TypeData value);

TypeData queue_de(Pqueue queue);

void show(Pqueue queue);

#endif

②seqqueue.c

#include "seqqueue.h"
Pqueue init_queue(Pqueue *queue, int m){
    *queue = (Pqueue)malloc(sizeof(Queue));
    if(*queue == NULL){
        return NULL;
    }
    (*queue)->data = (TypeData *)malloc(sizeof(Queue) * m);
    (*queue)->front = (*queue)->tail = 0;
    (*queue)->len = m;
    return *queue;
}

int isEmpty(Pqueue queue){
    return queue->front == queue->tail;
}

int full(Pqueue queue){
    return (queue->tail+1) % (queue->len) == (queue->front);
}

int get_length(Pqueue queue){
#if 0
    int a = queue->tail - queue->front;
    if(a >= 0){
        return a;
    }else{
        return (a + queue->len) % (queue->len);
    }
#else 
    return (queue->tail - queue->front + queue->len) % queue->len;
#endif
}

int queue_en(Pqueue queue, TypeData value){
    if(full(queue)){
        return -1;
    }
    queue->data[queue->tail] = value;
    queue->tail = (queue->tail + 1) % (queue->len);
    return 0;
}

TypeData queue_de(Pqueue queue){
    if(isEmpty(queue)){
        return -1;
    }
    TypeData temp = queue->data[queue->front];
    queue->front = (queue->front + 1) % (queue->len);
    return temp;
}

void show(Pqueue queue){
    for(int i = queue->front; i != queue->tail; i = (i + 1) % queue->len){
        printf("%d ",queue->data[i]);
    }
    printf("\n");
}

③seqqueue_main.c文章來源地址http://www.zghlxwxcb.cn/news/detail-606660.html

#include "seqqueue.h"
#include "seqqueue.c"
#include <unistd.h>
int main(int argc, char *argv[])
{ 
    Pqueue queue;
    init_queue(&queue, 10);

    printf("入隊(duì):");
    queue_en(queue, 20);
    queue_en(queue, 55);
    queue_en(queue, 60);
    queue_en(queue, 99);
    queue_en(queue, 22);
    queue_en(queue, 66);
    queue_en(queue, 100);
    show(queue);
    
    printf("出隊(duì):");
    queue_de(queue);

    show(queue);
    
    printf("隊(duì)內(nèi)還有%d個(gè)元素",get_length(queue));
    printf("\n");

    return 0;
} 

到了這里,關(guān)于九、數(shù)據(jù)結(jié)構(gòu)——順序隊(duì)列中的循環(huán)隊(duì)列的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Java 數(shù)據(jù)結(jié)構(gòu)篇-用鏈表、數(shù)組實(shí)現(xiàn)隊(duì)列(數(shù)組實(shí)現(xiàn):循環(huán)隊(duì)列)

    Java 數(shù)據(jù)結(jié)構(gòu)篇-用鏈表、數(shù)組實(shí)現(xiàn)隊(duì)列(數(shù)組實(shí)現(xiàn):循環(huán)隊(duì)列)

    ??博客主頁:?【 小扳_-CSDN博客】 ?感謝大家點(diǎn)贊??收藏?評論? ? 文章目錄 ? ? ? ? 1.0 隊(duì)列的說明 ????????1.1 隊(duì)列的幾種常用操作 ? ? ? ? 2.0 使用鏈表實(shí)現(xiàn)隊(duì)列說明 ????????2.1 鏈表實(shí)現(xiàn)隊(duì)列 ????????2.2 鏈表實(shí)現(xiàn)隊(duì)列 - 入棧操作 ????????2.3 鏈表實(shí)現(xiàn)隊(duì)

    2024年02月05日
    瀏覽(19)
  • 基于Python的數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)——循環(huán)順序隊(duì)列與遞歸(附詳細(xì)代碼和注釋)

    1、創(chuàng)建名為 prac04_01.py 的文件,在其中編寫一個(gè)循環(huán)順序隊(duì)列的類,該類必須包含 循環(huán)順序隊(duì)列的定義及基本操作,并通過以下步驟測試各種基本操作的實(shí)現(xiàn)是否正確。 (1)初始化一個(gè)循環(huán)順序隊(duì)列 CircularSequenceQueue。 (2)判斷隊(duì)列是否為空。 (3)遍歷隊(duì)列內(nèi)的所有元素。 (4)將元

    2024年02月05日
    瀏覽(22)
  • 【C++】【數(shù)據(jù)結(jié)構(gòu)】循環(huán)隊(duì)列的基本操作(初始化、入隊(duì)、出隊(duì)、取隊(duì)頭元素、遍歷輸出隊(duì)列、求隊(duì)列長度)順序隊(duì)列的算法實(shí)現(xiàn)【附全代碼】

    【C++】【數(shù)據(jù)結(jié)構(gòu)】循環(huán)隊(duì)列的基本操作(初始化、入隊(duì)、出隊(duì)、取隊(duì)頭元素、遍歷輸出隊(duì)列、求隊(duì)列長度)順序隊(duì)列的算法實(shí)現(xiàn)【附全代碼】

    使用c++完成數(shù)據(jù)結(jié)構(gòu)循環(huán)隊(duì)列的基本操作,包括(初始化、入隊(duì)、出隊(duì)、取隊(duì)頭元素、遍歷輸出隊(duì)列、求隊(duì)列長度等),可直接編譯運(yùn)行。 隊(duì)列 又稱為 “先進(jìn)先出” (FIFO)線性表。限定插入操作只能在隊(duì)尾進(jìn)行,而刪除操作只能在隊(duì)首進(jìn)行。 循環(huán)隊(duì)列 ——采用 順序存儲結(jié)構(gòu)

    2023年04月16日
    瀏覽(27)
  • 數(shù)據(jù)結(jié)構(gòu)---順序表,鏈表

    數(shù)據(jù)結(jié)構(gòu)---順序表,鏈表

    目錄 前言 線性表 線性表的概念 順序表 順序表的概念 順序表的結(jié)構(gòu) 接口實(shí)現(xiàn) 相關(guān)面試題分析 順序表的問題及思考 鏈表 鏈表的概念及結(jié)構(gòu) 鏈表的分類 單鏈表的實(shí)現(xiàn)? 接口實(shí)現(xiàn)? 鏈表面試題 雙向鏈表 順序表和鏈表的區(qū)別 ? ? ? ? 這篇文章主要講順序表和鏈表,有幾點(diǎn)需要

    2024年02月16日
    瀏覽(21)
  • 數(shù)據(jù)結(jié)構(gòu)—循環(huán)隊(duì)列(環(huán)形隊(duì)列)

    數(shù)據(jù)結(jié)構(gòu)—循環(huán)隊(duì)列(環(huán)形隊(duì)列)

    循環(huán)隊(duì)列是一種線性數(shù)據(jù)結(jié)構(gòu),其操作表現(xiàn)基于 FIFO(先進(jìn)先出)原則并且 隊(duì)尾被連接在隊(duì)首之后以形成一個(gè)循環(huán) 。它也被稱為“ 環(huán)形緩沖器 ”。 循環(huán)隊(duì)列的一個(gè)好處是可以利用這個(gè)隊(duì)列之前用過的空間。在一個(gè)普通隊(duì)列里,一旦一個(gè)隊(duì)列滿了,我們就不能插入下一個(gè)元素

    2024年02月11日
    瀏覽(19)
  • 數(shù)據(jù)結(jié)構(gòu)--隊(duì)列與循環(huán)隊(duì)列

    數(shù)據(jù)結(jié)構(gòu)--隊(duì)列與循環(huán)隊(duì)列

    ? ? ? ? 隊(duì)列是什么,先聯(lián)想一下隊(duì),排隊(duì)先來的人排前面先出,后來的人排后面后出;隊(duì)列的性質(zhì)也一樣,先進(jìn)隊(duì)列的數(shù)據(jù)先出,后進(jìn)隊(duì)列的后出;就像圖一的樣子: ?圖1 ? ? ? ? 如圖1,1號元素是最先進(jìn)的,開始出隊(duì)時(shí),那么他就是最先出的,然后12進(jìn)隊(duì),就應(yīng)該排在最

    2024年02月10日
    瀏覽(15)
  • 【數(shù)據(jù)結(jié)構(gòu)和算法】--隊(duì)列的特殊結(jié)構(gòu)-循環(huán)隊(duì)列

    【數(shù)據(jù)結(jié)構(gòu)和算法】--隊(duì)列的特殊結(jié)構(gòu)-循環(huán)隊(duì)列

    循環(huán)隊(duì)列是隊(duì)列的一種特殊結(jié)構(gòu),它的 長度是固定的 k ,同樣是 先進(jìn)先出 ,理論結(jié)構(gòu)是 首尾相連的環(huán)形循環(huán)結(jié)構(gòu) 。其理論結(jié)構(gòu)大致如下: 具體結(jié)構(gòu)描述可以參考 LeetCode : 622. 設(shè)計(jì)循環(huán)隊(duì)列的題目要求,大致如下: 設(shè)計(jì)你的循環(huán)隊(duì)列實(shí)現(xiàn)。 循環(huán)隊(duì)列是一種 線性數(shù)據(jù)結(jié)構(gòu) ,

    2024年02月04日
    瀏覽(16)
  • 【數(shù)據(jù)結(jié)構(gòu)】順序隊(duì)列模擬實(shí)現(xiàn)

    【數(shù)據(jù)結(jié)構(gòu)】順序隊(duì)列模擬實(shí)現(xiàn)

    ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???? ?? ?? ?? 個(gè)人主頁 :阿然成長日記 ??點(diǎn)擊可跳轉(zhuǎn) ?? 個(gè)人專欄: ??數(shù)據(jù)結(jié)構(gòu)與算法??C語言進(jìn)階 ?? 不能則學(xué),不知?jiǎng)t問,恥于問人,決無長進(jìn) ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 一、隊(duì)列的基本概念

    2024年02月10日
    瀏覽(25)
  • 【數(shù)據(jù)結(jié)構(gòu)】順序表和鏈表

    【數(shù)據(jù)結(jié)構(gòu)】順序表和鏈表

    線性表(linear list)是n個(gè)具有相同特性的數(shù)據(jù)元素的有限序列。 線性表是一種在實(shí)際中廣泛使 用的數(shù)據(jù)結(jié)構(gòu),常見的線性表:順序表、鏈表、棧、隊(duì)列、字符串... 線性表在邏輯上是線性結(jié)構(gòu),也就說是連續(xù)的一條直線。但是在物理結(jié)構(gòu)上并不一定是連續(xù)的, 線性表在物理上

    2024年01月20日
    瀏覽(156)
  • 數(shù)據(jù)結(jié)構(gòu):循環(huán)隊(duì)列的實(shí)現(xiàn)(leetcode622.設(shè)計(jì)循環(huán)隊(duì)列)

    數(shù)據(jù)結(jié)構(gòu):循環(huán)隊(duì)列的實(shí)現(xiàn)(leetcode622.設(shè)計(jì)循環(huán)隊(duì)列)

    ? 目錄 一.循環(huán)隊(duì)列簡單介紹 二.用靜態(tài)數(shù)組實(shí)現(xiàn)循環(huán)隊(duì)列 1.數(shù)組循環(huán)隊(duì)列結(jié)構(gòu)設(shè)計(jì) 2.數(shù)組循環(huán)隊(duì)列的堆區(qū)內(nèi)存申請接口? 3.數(shù)據(jù)出隊(duì)和入隊(duì)的接口實(shí)現(xiàn) 4.其他操作接口 5.數(shù)組循環(huán)隊(duì)列的實(shí)現(xiàn)代碼總覽? 三.靜態(tài)單向循環(huán)鏈表實(shí)現(xiàn)循環(huán)隊(duì)列? 1.鏈表循環(huán)隊(duì)列的結(jié)構(gòu)設(shè)計(jì) 2.創(chuàng)建靜態(tài)

    2024年02月03日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包