データ入力の構造 - キュー

「達成する方法FIFO」ストレージ構造を

カテゴリー:

  1. チェーンキュー:実装されたリンクリスト
  2. 静的キュー:静的キューにする必要があり、達成するために配列を使用は一般的である循環キュー

循環キューは、説明します。

  1. なぜ静的循環キューキュー

    メモリの無駄を削減

  2. 循環キューは、決定するために、いくつかのパラメータが必要

    二つのパラメータ、Frant、REARが、2つのパラメータは、別の機会に異なる意味を持っている初心者が覚えておくことをお勧め

  3. 各種パラメータ巡回キューの意味

    キュー初期化:フロントとリアの値はゼロであります

    非空のキュー:次の前部要素は、キューの最初の要素、最後の有効な要素の後部エージェントキューを表し

    等しい値の前後、必ずしもそうではないがゼロ:キューが空であります

  4. チーム擬似アルゴリズム含まサイクリングチーム

    示される後方位置に格納された値

    エラー文言:R = + 1

    右R =(R + 1)%の配列の長さであるべきです

  5. チームのサイクリングチームリストの疑似アルゴリズム

    フロント=(フロント+ 1)%の配列長

  6. 円形キューが空であるかどうかを確認する方法

    値は前面および背面を等しい場合、キューが空であります

  7. 円形キューが満杯であるかを決定する方法

    マルチパラメータテーブルは、増加を識別する

    少なくとも一つの元素で、そのようなものが通常である:(。+リア1)配列の長さ==フロント%

特定の実装

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>


typedef struct Queue
{
    int * pBase;
    int front;
    int rear;
}QUEUE;

void init(QUEUE *);
bool full_queue(QUEUE *);
bool empty(QUEUE *);
bool en_queue(QUEUE * , int val); // 入队
void traverse(QUEUE *);
bool out(QUEUE *, int * pVal);


int main(void)
{
    QUEUE Q;
    int val;

    init(&Q);
    en_queue(&Q , 1);
    en_queue(&Q , 2);
    en_queue(&Q , 3);
    en_queue(&Q , 4);
    en_queue(&Q , 5);
    en_queue(&Q , 6);
    en_queue(&Q , 7);

    traverse(&Q);
    if (out(&Q , &val))
    {
        printf("出队成功,出队的元素:%d\n", val);
        en_queue(&Q , 9);
        traverse(&Q);
    }
    else
    {
        printf("出队失败\n");
    }


    return 0;
}


void init(QUEUE * pQ)
{
    pQ->pBase = (int *)malloc(sizeof(int) * 6); // 初始化默认是长度是6
    if (NULL == pQ->pBase)
    {
        printf("初始化失败\n");
        exit(-1);
    }

    pQ->front = 0;
    pQ->rear = 0;
}

bool full_queue(QUEUE *pQ)
{
    if ((pQ->rear+1)%6 == pQ->front)
    {
        return true;
    }
    else
    {
        return false;
    }
}

bool en_queue(QUEUE *pQ , int val)
{
    if (full_queue(pQ))
    {
        return false;
    }
    else
    {
        pQ->pBase[pQ->rear] = val;
        pQ->rear = (pQ->rear+1)%6;
        return true;
    }
}

void traverse(QUEUE * pQ)
{
    int i = pQ->front;

    while(i != pQ->rear)
    {
        printf("%d\n",pQ->pBase[i] );
        i = (i+1) % 6;
    }

    return;
}


bool empty(QUEUE * pQ)
{
    if (pQ->front == pQ->rear)
    {
        return true;
    }
    else
    {
        return false;
    }
}


bool out(QUEUE * pQ, int * pVal)
{

    if (empty(pQ))
    {
        return false;
    }
    else
    {
        *pVal = pQ->pBase[pQ->front];
        pQ->front = (pQ->front+1) % 6;
        return true;
    }

}

キューアプリケーション

  • そして、すべての時間関連の操作は、シャドウキューを持っています

おすすめ

転載: www.cnblogs.com/mengd/p/12045809.html