キューの定義と基本的な操作

1.定義

1.キューは先入れ先出しの線形テーブルであり、その操作はテーブルの両端でのみ実行できます
ここに画像の説明を挿入
。2。分類:チェーンキューチェーン表現;循環キューシーケンシャル表現

第二に、チェーンキュー

ノード構造:

typedef struct QNode{
    
    
       int data;
       struct QNode *next;
}QNode,*QPtr;

チェーンキュー構造

typedef struct {
    
    
       QPtr *front;   //队首指针
       QPtr *rear;    //队尾指针
}LinkQueue;

空のキューを作成する

Status InitQueue(LinkQueue Q)
{
    
    
  Q.front=Q.rear=(QNode*)malloc(sizeof(QNode));
  if(!Q.front)exit(0); //存储分配失败
  Q.front->next=NULL;
}
  

エンキュー操作

EnQueue(LinkQueue Q,int e)
{
    
    
  QPtr p=(QNode*)malloc(sizeof(QNode));
  if(!p)exit(0);//储存分配失败
 p->next=NULL;
 p->data=e;
 Q.rear->next=p;
 Q.rear=p;
}

デキュー操作

DeQueue(LinkQueue Q,int e)
{
    
    
  QPtr p=(QNode*)malloc(sizeof(QNode));
  if(!p)exit(0);//储存分配失败
  if(Q.front==Q.rear)return ERROR;//队列为空,无法完成出队操作
  p=Q.front->next;
  e=p->data;
 Q.front->next=p->next;
 if(Q.rear==p)Q>front=Q.rear;
 free(p);
  }

3つの順次キュー配列表現

エンキュー操作

EnQueue(Q[MAX],int x)
{
    
    
   if(rear+1>=MAX)cout<<"队满"<<endl;
   else
   {
    
    
    Q[rear]=x;
    rear++;
   }
}

デキュー操作

DeQueue(Q[MAX],int e)
{
    
    
 if(front==rear)cout<<"队空"<<endl;
 else
 {
    
    
 e=Q[front];
 front++;
 return e;
 }
}

4つの循環キュー

注:
チーム全体条件は次のとおりです。

(rear+1)%MAX==front

チームの空の条件は次のとおりです。

rear==front

おすすめ

転載: blog.csdn.net/gets_s/article/details/105093289