顺序存储
typedef 队列元素类型 ElemTp;
typedef struct {
ElemTp *elem;
int size; //队列容量
int head; //队头指针
int tail; //队尾指针
}SqQueue;
int createQueue(Queue &q, int n) //建容量为n的队列
{
if(n<=0)
return 0;
q.size=n;
q.head=-1;
q.tail=-1;
q.elem=new ElemTp[n];
if(!q.elem)
return 0;
return 1; //返回1表示成功;返回0表示失败
}
void destroyQueue(Queue &q) //销毁队列存储空间
{
q.n=0;
q.head=-1;
q.tail=-1;
delete []q.elem;
}
void clearQueue(Queue &q) //置空队列
{
q.head=-1;
q.tail=-1;
}
//检查队列是否为空
bool isEmpty(Queue &q) {
return q.head == -1;
}
//检查队列是否已满
bool isFull(Queue &q) {
return ((q.tail + 1) % q.size) == q.head;
}
//队尾插入元素,成功返回true
bool enQueue(int value,Queue &q) {
if (isFull()) {
return false;
}
if (isEmpty()) {//插入第一个元素时,head指向第一个元素;此后只有在删除元素时head指针才会移动
q.head = 0;
}
q.tail = (q.tail + 1) % q.size;//tail指针循环右移
q.elem[q.tail] = value;
return true;
}
//删除队头元素,成功返回true
bool deQueue(Queue &q) {
if (isEmpty()) {
return false;
}
if (q.head == q.tail) {//队列只剩最后一个元素,删除后head,tail都置为-1
q.head = -1;
q.tail = -1;
return true;
}
q.head = (q.head + 1) % q.size;//head指针循环右移
return true;
}
队列为空 q.head==-1
队列填满 ((q.tail+1)%q.size)==q.head
第一种填满情况
第二种填满情况