若用数组实现队列一般会整成循环队列,要不队列没法用~~~实现的功能包括创建队列、入队列、出队列、读队列头~~~~~~~ /************************************************************************/ /* author : thomas E-mail: chenhua308@gmail.com */ /************************************************************************/ //循环队列(数组实现) #include <stdlib.h> #include <stdio.h> #define MAXSIZE 5 typedef int T; typedef struct tag { int front, rear, MaxSize, count; //其实MaxSize变量完全可以不要 T elements[MAXSIZE]; } QUEUE; void creat( QUEUE *queue ) { queue -> front = 0; queue -> rear = 0; queue -> count = 0; queue -> MaxSize = MAXSIZE - 1; } int is_empty( QUEUE queue) //其实最好传指针免得栈开销太大 { if ( queue.count == 0 ) { return 1; } else { return 0; } } int is_full( QUEUE queue ) { if ( queue.count == MAXSIZE ) { return 1; } else { return 0; } } void readqueue( QUEUE queue ) //just read the value { if ( queue.count == 0 ) //可以用前面的is_empty函数进行判断 { printf("the queue is empty! no number is available! /n"); } else { printf("the first number is %d /n", queue.elements[queue.front]); } } void in_queue( QUEUE *queue, T value ) { if ( queue -> count == MAXSIZE ) //可以利用前面的is_full函数进行判断 { printf("sorry! the queue is full! no space is available!/n"); } else { if ( queue -> count == 0 ) { //主要是处理队列为空时的入队列 queue -> elements[queue -> rear] = value; queue -> count += 1; } else { queue -> rear = (queue -> rear + 1) % MAXSIZE; queue -> elements[queue ->rear] = value; queue -> count += 1; } } } T out_queue( QUEUE *queue ) { if ( queue -> count == 0 ) //可以利用前面的is_empty函数进行判断 { printf("sorry! the queue is empty! no number is available! /n"); exit(EXIT_FAILURE); } else { queue -> front = (queue -> front + 1) % MAXSIZE; queue -> count -= 1; return queue -> elements[queue -> front]; } } //print queue void print( QUEUE queue ) { int i = 1/*, count*/; if ( queue.count == 0 ) { printf("the queue is empty! no number can be printed! /n"); } else { //count = queue.count; printf("the number of queue is %d /n", queue.count); for ( i; i <= queue.count; i++ ) { printf("the %d number is %d /n", i, queue.elements[(queue.front + i - 1) % MAXSIZE]); //printf("the %d number is %d /n", i, queue.elements[queue.front + i - 1]); } } } //test functions void main(int argc, char *argv[]) { QUEUE queue; creat(&queue); //out_queue(&queue); in_queue(&queue, 2); print(queue); in_queue(&queue, 4); print(queue); in_queue(&queue, 5); print(queue); in_queue(&queue, 6); print(queue); in_queue(&queue, 1); print(queue); out_queue(&queue); print(queue); in_queue(&queue, 9); print(queue); //out_queue(&queue); //print(queue); in_queue(&queue, 7); //print(queue); }