ps: 值得注意的是当使用 q->rear +1) % MAXSIZE == q->front 条件判断队列是否满时需要牺牲一个单位的存储空间,也就是说当 MAXSIZE 定义为4时队列只能存储3个元素。
队列已满:当尾指针 rear指向第四的存储空间时(第四个存储空间不存放元素)我们就可以判定当前队列已满。
队列为空:front 指针与rear指针都指向同一个存储空间时即可判定当前队列为空。
#include#include #define MAXSIZE 4 #define SUCCESS 1 #define ERROR 0 typedef int status; typedef int ElemType; typedef struct{ ElemType *base; int front; //队头 int rear; //队尾 }Queue; status initQueue(Queue *q); status in_Queue(Queue *q,ElemType e); status out_Queue(Queue *q,ElemType *e); int is_emptyQueue(Queue *q); int is_fullQueue(Queue *q); int showQueue(Queue *q); int main() { Queue q; ElemType e; initQueue(&q); in_Queue(&q,1); in_Queue(&q,2); in_Queue(&q,3); printf("遍历队列: "); showQueue(&q); putchar('n'); out_Queue(&q,&e); printf("遍历队列: "); showQueue(&q); putchar('n'); out_Queue(&q,&e); out_Queue(&q,&e); return 0; } status initQueue(Queue *q) { q->base = (ElemType *)malloc(sizeof(ElemType) * MAXSIZE); //动态申请内存空间 if(!q->base ) { printf("内存空间申请失败"); return ERROR; } q->front = q->rear = 0; return SUCCESS; } status in_Queue(Queue *q,ElemType e) { if((q->rear +1) % MAXSIZE == q->front ) //判断队列是否已满 { printf("队列已满n"); return ERROR; } printf("元素 %d 已入队n",e); q->base[q->rear ] = e; q->rear = (q->rear +1) % MAXSIZE; //rear 后移 } status out_Queue(Queue *q,ElemType *e) { if(q->front == q->rear ) //判断队列是否为空 { printf("队列为空n"); return ERROR; } printf("队列元素: %d 出队n",q->base[q->front]); *e = q->base[q->front]; q->front = (q->front +1 ) % MAXSIZE; return SUCCESS; } int is_emptyQueue(Queue *q) { if(q->front == q->rear) { return 1; }else { return 0; } } int is_fullQueue(Queue *q) { if((q->rear +1) % MAXSIZE == q->front) { return 1; }else { return 0; } } int showQueue(Queue *q) { int i,j; i = q->front; j = q->rear; if(i==j) { printf("队列为空n"); return 0; } while(i base[i]); i++; } return 1; }
效果图:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)