循环队列实现
Posted Malphite
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了循环队列实现相关的知识,希望对你有一定的参考价值。
queue.h
#ifndef QUEUE_ #define QUEUE_ #define SIZE 10 typedef int data_t; typedef struct head{ data_t data[SIZE]; int front; int rear; }queue_t; queue_t *queue_creat(); int queue_is_empty(queue_t *head); int queue_is_full(queue_t *head); void queue_clear(queue_t *head); int queue_en(queue_t *head,data_t data); data_t queue_de(queue_t *head); void queue_show(queue_t *head); void queue_detory(queue_t **head); #endif
queue.c
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <strings.h> #include "queue.h" queue_t *queue_creat() { queue_t *head = (queue_t *)malloc(sizeof(queue_t)); bzero(head,sizeof(queue_t)); head->front = 0; head->rear = 0; return head; } int queue_is_empty(queue_t *head) { return head->front == head->rear; } int queue_is_full(queue_t *head) { return head->rear - head->front == SIZE; } void queue_clear(queue_t *head) { head->rear = head->front; } int queue_en(queue_t *head,data_t data) { if(queue_is_full(head)) { printf("queue is fulll\n"); return -1; } head->data[head->rear%SIZE] = data; head->rear++; return 0; } data_t queue_de(queue_t *head) { if(queue_is_empty(head)) { printf("queue is empty\n"); return -1; } data_t data = head->data[head->front%SIZE]; head->front++; return data; } void queue_show(queue_t *head) { int i; for(i=head->front;i<head->rear;i++) { printf("%d\t",head->data[i%SIZE]); } printf("\n"); } void queue_destory(queue_t **head) { free(*head); *head = NULL; }
main.c
#include <stdio.h> #include "queue.h" int main() { queue_t *head = queue_creat(); int n=10; while(n--) { queue_en(head,n+1); } queue_show(head); queue_destory(&head); return 0; }
以上是关于循环队列实现的主要内容,如果未能解决你的问题,请参考以下文章