数据结构之表(7)队列的顺序实现
代码:
# include <stdio.h>
# include <stdlib.h>
# define MAXSIZE 2 /*队列长度*/
/*存储结构*/
typedef struct queue_tag {
int * front; /*指向队首*/
int * rear ; /*指向队尾*/
}ds_queue;
/*初始化*/
void ds_init(ds_queue * q) {
int * temp ;
temp = (int *)malloc(MAXSIZE * sizeof(int)) ;
if(!temp)
exit(0) ;
q->front = temp ;
q->rear = q->front ; /*队首和队尾指向同一个位置*/
}
/*是否为空*/
int ds_isEmpty(ds_queue * q) {
if(q->front == q->rear)
return 1 ; /*空,返回1*/
else
return 0 ;
}
/*入队*/
void ds_enqueue(ds_queue * q,int elem) {
if(q->rear - q->front == MAXSIZE) {
printf("队列已满!\n") ;
return ;
}
*(q->rear) = elem ; /*数据入队,将队尾指针后移一个位置*/
++ q->rear ;
}
/*出队*/
int ds_dequeue(ds_queue * q) {
if(ds_isEmpty(q)) {
printf("队列为空\n") ;
return 0;
}
else
{
int *temp ;
int elem ;
elem = *(q->front) ;
/*将所有数据向前移动一个位置*/
temp = q->front ;
for( ; temp < q->rear ; *(temp) = *(temp + 1),temp ++) ;
--q->rear ;
return elem ;
}
}
测试程序
int main()
{
ds_queue q ;
ds_init(&q) ;
printf("入队顺序为1,2,3(队列长度为2)\n") ;
ds_enqueue(&q,1) ;
ds_enqueue(&q,2) ;
ds_enqueue(&q,3) ;
printf("出队顺序:") ;
printf("%d ",ds_dequeue(&q)) ;
printf("%d ",ds_dequeue(&q)) ;
ds_dequeue(&q) ;
getchar() ;
return 0 ;
}
结果

浙公网安备 33010602011771号