From cac21ddd0863842fd3b2d3c58c569ab91bc22269 Mon Sep 17 00:00:00 2001 From: Kim Yang Date: Sun, 2 Aug 2020 22:29:40 +0800 Subject: [PATCH] :sparkles: Add SqQueue2 --- .../DS_2_StackAndQueue/DS_2_3_SqQueue0.cpp | 5 +++++ .../DS_2_StackAndQueue/DS_2_4_SqQueue1.cpp | 5 +++++ .../DS_2_StackAndQueue/DS_2_5_SqQueue2.cpp | 22 +++++++++++-------- 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/DataStructure/DS_2_StackAndQueue/DS_2_3_SqQueue0.cpp b/DataStructure/DS_2_StackAndQueue/DS_2_3_SqQueue0.cpp index a5d4b41..e10cc2c 100644 --- a/DataStructure/DS_2_StackAndQueue/DS_2_3_SqQueue0.cpp +++ b/DataStructure/DS_2_StackAndQueue/DS_2_3_SqQueue0.cpp @@ -85,6 +85,11 @@ void TestQueue(){ } else{ printf("获取队头元素失败!"); } + if(QueueEmpty(Q)){ + printf("队空啦\n"); + } else{ + printf("队非空\n"); + } printf("结束测试!\n"); } diff --git a/DataStructure/DS_2_StackAndQueue/DS_2_4_SqQueue1.cpp b/DataStructure/DS_2_StackAndQueue/DS_2_4_SqQueue1.cpp index fe2c97d..2909895 100644 --- a/DataStructure/DS_2_StackAndQueue/DS_2_4_SqQueue1.cpp +++ b/DataStructure/DS_2_StackAndQueue/DS_2_4_SqQueue1.cpp @@ -93,6 +93,11 @@ void TestQueue(){ } else{ printf("出队失败了,再检出一下吧!\n"); } + if(QueueEmpty(Q)){ + printf("队空啦\n"); + } else{ + printf("队非空\n"); + } printf("结束测试!\n"); diff --git a/DataStructure/DS_2_StackAndQueue/DS_2_5_SqQueue2.cpp b/DataStructure/DS_2_StackAndQueue/DS_2_5_SqQueue2.cpp index fe2c97d..790e19b 100644 --- a/DataStructure/DS_2_StackAndQueue/DS_2_5_SqQueue2.cpp +++ b/DataStructure/DS_2_StackAndQueue/DS_2_5_SqQueue2.cpp @@ -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"); }