資料結構_佇列
阿新 • • 發佈:2021-02-20
佇列: 一個有先進先出特點的線性表。
佇列的基本操作:
(1)佇列的初始化(InitQueue(q))
初始化一個空隊。
(2)入隊操作(InQueue(q,x))
對已存在的佇列q,插入一個元素x至隊尾,成功,返回true,失敗,返回false。
(3)出隊操作(OutQueue(q,x))
刪除隊首元素,並返回其值,成功返回true,否則返回false。
(4)讀隊頭元素(FrontQueue(q,x))
讀隊頭元素,並返回其值,隊不變,成功返回true,否則返回false。
(5)判隊空操作(EmptyQueue(q))
若佇列為空,則返回1,否則返回0 。
迴圈佇列資料結構定義:
typedef struct{
QueueElementType element[maxsize];
int front;
int rear;
}SeqQueue;
SeqQueue *q;
迴圈佇列初始化:
void InitQueue(SeqQueue Q){
Q->front=Q->rear=maxsize-1;
}
入隊操作:
int InQueue(SeqQueue *Q,QueueElementType x){
if((Q->rear+1)&maxsize==q->front)
return (false);
Q->rear=(Q-> rear+1)%maxsize;
Q->element[Q->rear]=x;
return(true);
}
出隊操作:
DeleteQueue(SeqQueue *Q,QueueElementType x)
{
if(Q->front==Q->rear)
return(false);
Q->front=(Q->front+1)%maxsize;
*x=Q->element[Q->front];
return(true);
}
如何判斷佇列空還是滿
1.少用一個儲存單元;
2.設定標誌位;
3.設定一個計數器。
鏈佇列資料結構定義:
typedef struct Node{
QueueElementType data;
struct Node *next;
}LinkQueueNode;
typedef struct{
LinkQueueNode *front;
LinkQueueNode *rear;
}LinkQueue;
LinkQueue *Q;
鏈佇列初始化:
int InitQueue(LinkQueue *Q){
Q->front=(LinkQueueNode*)malloc(sizeof(LinkQueueNode));
if(Q->front!=NULL){
Q->rear=Q->front;
Q->front->next=NULL;
return(true);
}
else
return(false);
}
鏈佇列入隊操作:
int EnterQueue(LinkQueue *Q,QueueElementType x){
LinkQueueNode *newNode;
newNode=(LinkQueueNode *)malloc(sizeof(LinkQueueNode));
if(newNode!=NULL){
newNode->data=x;
newNode->next=NULL;
Q->rear->next=newNode;
Q->rear=newNode;
return(true);
}
else
return(false);
}
鏈隊列出隊操作:
int DeleteQueue(LinkQueue *Q,QueueElementType x){
LinkQueueNode *p;
if(Q->front==Q->rear)
return(false);
else{
p=Q->front->next;
Q->front->next=p->next;
*x=p->data;
free(p);
return(true);
}
}