1.浪费一个单元来区分队空/队满
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 10
typedef struct {
int data[MAXSIZE];//0 - maxsize-1
int front, rear;//尾指针指向最后元素的下一位
}SqQueue;
void initQueue(SqQueue& Q)
{
Q.front = 0;
Q.rear = 0;
}
bool isEmpty(SqQueue Q)
{
if (Q.front == Q.rear)
return true;
else
return false;
}
//入队
bool enQueue(SqQueue& Q, int elemIn)
{
if ((Q.rear + 1) % MAXSIZE == Q.front)//取余操作处理了rear为MAXSIZE时的临界状态
return false;
Q.data[Q.rear] = elemIn;
Q.rear = (Q.rear + 1) % MAXSIZE;
return true;
}
//出队
bool deQueue(SqQueue& Q, int& elem)
{
if (Q.rear == Q.front)
return false;
elem = Q.data[Q.front];
Q.front = (Q.front + 1) % MAXSIZE;
return true;
}
int lenQueue(SqQueue Q)
{
return (Q.rear + MAXSIZE - Q.front) % MAXSIZE;
}
int main()
{
SqQueue q1;
initQueue(q1);
int i = 1;
while (enQueue(q1,i))
{
i++;
}
i--;
printf("此队列长度为%d\n", i);
printf("lenQueue函数计算得长度:%d\n", lenQueue(q1));
int t = 0;
while (deQueue(q1,t))
{
printf("%d\t", t);
}
return 0;
}
2.增加size成员来区分队空队满
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 10
typedef struct {
int data[MAXSIZE];
int front, rear;
int size;
}SqQueue;
void initQueue(SqQueue& Q)
{
Q.front = 0;
Q.rear = 0;
Q.size = 0;
}
bool isEmpty(SqQueue Q)
{
if (Q.front == Q.rear)
return true;
else
return false;
}
//入队
bool enQueue(SqQueue& Q, int elemIn)
{
if ((Q.rear == Q.front) && Q.size == MAXSIZE)//取余操作处理了rear为MAXSIZE时的临界状态
return false;
Q.data[Q.rear] = elemIn;
Q.rear = (Q.rear + 1) % MAXSIZE;
Q.size++;
return true;
}
//出队
bool deQueue(SqQueue& Q, int& elem)
{
if ((Q.rear == Q.front) && Q.size == 0)
return false;
elem = Q.data[Q.front];
Q.front = (Q.front + 1) % MAXSIZE;
Q.size--;
return true;
}
int lenQueue(SqQueue Q)
{
return Q.size;
//if(Q.size==MAXSIZE)
// return MAXSIZE;
//else
// return (Q.rear + MAXSIZE - Q.front) % MAXSIZE;
}
int main()
{
SqQueue q1;
initQueue(q1);
int i = 1;
while (enQueue(q1,i))
{
i++;
}
i--;
printf("此队列长度为%d\n", i);//这时被浪费的一个单元也可以使用了
printf("lenQueue函数计算得长度:%d\n", lenQueue(q1));
int t = 0;
while (deQueue(q1,t))
{
printf("%d\t", t);
}
return 0;
}