#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
typedef int q_t;
typedef struct {
q_t in;
q_t out;
q_t *data;
q_t mxlen;
}queue_t;
/*create a queue and init*/
queue_t * create_queue(int len){
queue_t *q = (queue_t*)malloc(sizeof(queue_t));
if(q == NULL){
perror("err");
return NULL;
}
q->data = (q_t*)malloc(sizeof(q_t)*(len+1)); //+1: start from 0
if(q->data == NULL){
perror(" data err");
return NULL;
}
q->mxlen = len+1;
q->in = 0;
q->out = 0;
return q;
}
/*clear a queue*/
int clear_queue(queue_t *body){
if(body == NULL) return -1;
body->in = 0;
body->out = 0;
return true;
}
/*delete a queue*/
int delete_queue(queue_t* body){
if(body == NULL) return -1;
free(body->data);
free(body);
return true;
}
/*join a queue*/
int join_queue(queue_t* body,q_t data){
if(body == NULL){
perror("queue error");
return -1;
}
if((body->in+1) % body->mxlen == body->out){
perror("queue full");
return -2;
}
body->data[body->in++] = data;
body->in % body->mxlen;
return true;
}
/*exit a queue*/
int exit_queue(queue_t *body,q_t *data){
if(body == NULL){
perror("exit err");
return -1;
}
if(body->in == body->out){
perror("queue empty");
return -2;
}
*data = body->data[body->out--];
body->out % body->mxlen;
return true;
}
实现顺序队列(c代码)
最新推荐文章于 2023-08-04 07:48:18 发布