Add SqQueue2

This commit is contained in:
Kim Yang
2020-08-02 22:29:40 +08:00
parent 13463c20f6
commit cac21ddd08
3 changed files with 23 additions and 9 deletions

View File

@@ -10,18 +10,18 @@
typedef struct {
int data[MaxSize];//
int front,rear;//对头指针和队尾指针
int size;//利用size变量记录队列长度并用作判满的条件!有了size就不会浪费一个存储空间
int tag;//利用tag变量记录最后一次操作是什么0为删除1为插入,并用作判满的条件!有了tag就不会浪费一个存储空间
}SqQueue;
//初始化
void InitQueue(SqQueue &Q){
Q.rear=Q.front=0;//初始化时队头队尾都指向0
Q.size=0;//初试长度
Q.tag=0;//初始化最后一次的操作状态
}
//判空
bool QueueEmpty(SqQueue Q){
if(Q.size==0)//有了size,条件不一样了
if(Q.front==Q.rear&&Q.tag==0)//有了tag,条件不一样了
return true;
else
return true;
@@ -29,24 +29,24 @@ bool QueueEmpty(SqQueue Q){
//入队操作
bool EnQueue(SqQueue &Q,int t){
if(Q.size==MaxSize)return false;//队满,注意这里的判满条件
if(Q.front==Q.rear&&Q.tag==1)return false;//队满,注意这里的判满条件
Q.data[Q.rear]=t;
Q.rear=(Q.rear+1)%MaxSize;//通过取余操作让整个队列循环起来
Q.size++;
Q.tag=1;
return true;
}
//出队操作
bool DeQueue(SqQueue &Q,int &x){
if(Q.size==0)return false;//队空
if(Q.rear==Q.front&&Q.tag==0)return false;//队空
x=Q.data[Q.front];
Q.front=(Q.front+1)%MaxSize;
Q.size--;
Q.tag==0;
return true;
}
//获取队头元素,用x返回
bool GetHead(SqQueue Q,int &x){
if (Q.size==0)return false;
if (Q.rear==Q.front&&Q.tag==0)return false;
x=Q.data[Q.front];
return true;
}
@@ -93,7 +93,11 @@ void TestQueue(){
} else{
printf("出队失败了,再检出一下吧!\n");
}
if(QueueEmpty(Q)){
printf("队空啦\n");
} else{
printf("队非空\n");
}
printf("结束测试!\n");
}