#include <stdio.h>
#include <stdlib.h>
#define SUCCESS 0
#define FAILED -1
typedef struct {
int * parr;
int head;
int tail;
int length;
} CircleQueue;
CircleQueue queue;
int init(CircleQueue* p, int length) {
p->parr = (int*)malloc(sizeof(int) * length);
if(NULL == p->parr) {
return FAILED;
}
int i;
for(i = 0; i < length; i++){
p->parr[i] = 0;
}
p->head = 0;
p->tail = 0;
p->length = length;
}
int put(CircleQueue *p, int value) {
if((p->tail + 1) % p->length == p->head) {
return FAILED;
}
p->parr[p->tail] = value;
p->tail = p->tail + 1;
if(p->tail == p->length) {
p->tail = 0;
}
return SUCCESS;
}
int get(CircleQueue *p) {
if(p->head == p->tail) {
return FAILED;
}
int temp;
temp = p->parr[p->head];
p->head = p->head + 1;
if(p->head == p->length) {
p->head = 0;
}
return temp;
}
int main () {
int length = 10;
char option;
int ret;
printf("please input length ofcircle queue:");
scanf("%d", &length);
init(&queue, length);
do {
printf("input operation you want to do, must be i or g:");
scanf("%c", &option);
if(option == 'i'){
printf("input value:\n");
scanf("%d", &length);
ret = put(&queue, length);
if(ret != SUCCESS) {
printf("circle queue is full\n");
}
}else if(option == 'g'){
ret = get(&queue);
if(ret == FAILED){
printf("circle queue is empty\n");
}else {
printf("get value in queue is:%d\n", ret);
}
}else {
printf("wrong operation\n");
}
}while(option != EOF);
return 0;
}
循环队列的c实现
最新推荐文章于 2022-11-08 18:57:15 发布