一个循环队列Queue,只有头指针front,不设尾指针,另设一个含有元素个数的计数器count,完成以下程序设计:
- 试写出相应的入队算法。
- 试写出相应的出队算法。
解析:不设尾指针,只影响入队,出队依旧是依赖队头指针;但是加了一个count计数,方便了判队空和判队满,而 front+count 就是队尾指针的位置。
#define SIZE 10
typedef struct{
int data[SIZE];
int front; //头指针
int count; //计数
}Queue;
//入队
void push(Queue *q, int e){
//判队满
if(q->count == SIZE)
printf("队满\n");
int index = (q->front + q->count + SIZE)%SIZE;
q->data[index] = e;
q->count++;
}
void pop(Queue *q){
if(q->count == 0)
printf("队空\n");
q->front = (q->front + 1) % SIZE;
q->count--;
}
//出队
void show(Queue *q){
int i = q->front;
int j = 1;
while(j<=q->count){
printf("%4d",q->data[i]);
i = (i + 1)%SIZE;
j++;
}
printf("\n");
}