数据结构——队列
作者:互联网
1、队列
Queue
定义
队列是只允许在一端进行插入,在另一端删除的线性表。
基本操作
创、销:
- InitQueue(&Q):初始化队列
- DestroyQueue(&Q):销毁队列
增、删:
- EnQueue(&Q, x):入队
- DeQueue(&Q, &x):出队
查:
- GetHead(Q, &x):读队头元素
其他常用操作:
- QueueEmpty(Q):判断队列Q是否为空
2、顺序实现队列
用顺序存储方式实现的队列
#define Maxsize 10
typedef struct{
ElemType data[MaxSize]; //静态数组存放队列元素
int front,rear; //队头指针和队尾指针
}SqQueue;
基本操作
初始化队列
void InitQueue(SqQueue &Q){
//初始时,队头队尾指针指向0
Q.rear=Q.front=0;
}
入队操作
注意队列已满的条件,rear指针的位置
bool EnQueue(SqQueue &Q, ElemType x){
if((Q.rear+1)%MaxSize==Q.front)
return false;
Q.data[Q.rear] = x;
Q.rear=(Q.rear+1)%MaxSize; //循环队列
return true;
}
出队操作
bool DeQueue(SqQueue &Q, ElemType x){
if(Q.rear==Q.front)
return false;
x = Q.data[Q.front];
Q.front=(Q.front+1)%MaxSize; //循环队列
return true;
}
读队头元素
bool GetHead(SqQueue Q, ElemType &x){
if(Q.rear==Q.front)
return false;
x = Q.data[Q.front];
return true;
}
判断队列是否为空
void QueueEmpty(SqQueue Q){
if(Q.rear==Q.front)
return true;
else
return false;
}
3、链式实现队列
用链式存储方式实现队列
typedef struct Linknode{ //链式队列结点
ElemType data;
struct Linknode *next;
}Linknode;
typedef struct{ //链式队列
Linknode *front, *rear;
}LinkQueue;
基本操作
初始化
void InitQueue(LinkQueue &Q){
Q.front=Q.rear=(Linknode *)malloc(sizeof(Linknode));
Q.font->next=NULL;
}
入队操作
void EnQueue(LinkQueue &Q, ElemType x){
Linknode *s = (Linknode *)malloc(sizeof(Linknode));
s->data=x;
s->next=NULL;
Q.rear->next=s;
Q.rear=s;
}
出队操作
bool DeQueue(LinkQueue &Q, ElemType &x){
if(Q.font==Q.rear)
return false;
Linknode *p=Q.front->next;
x=p->data;
Q.front->next=p->next;
if(Q.rear==p)
Q.rear=Q.front;
free(p);
return true;
}
标签:return,队列,next,front,数据结构,Linknode,rear 来源: https://blog.csdn.net/weixin_43900568/article/details/118574014