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