用C语言写出先入先出队列的结构体Queue定义,并实现以下函数: Queue *create(int size):创建一个能放size个int类型的队列,返回队列的指针。 int put(Queue *queue, int value):将value入队,返回0表示成功,-1表示出错。 int get(Queue *queue, int *pvalue):将数据出队并存入pvalue,返回0表示成功,-1表示出错。
时间: 2023-08-18 16:06:23 浏览: 221
好的,这是您的问题:用C语言写出先入先出队列的结构体Queue定义,并实现以下函数: Queue *create(int size):创建一个能放size个int类型的队列,返回队列的指针。 int put(Queue *queue, int value):将value入队,返回0表示成功,-1表示出错。 int get(Queue *queue, int *pvalue):将数据出队并存入pvalue,返回0表示成功,-1表示出错。
以下是该队列结构体定义和函数实现代码:
```c
// 队列结构体定义
typedef struct {
int *data; // 存放数据的数组
int size; // 队列大小
int head; // 队头
int tail; // 队尾
} Queue;
// 创建队列,返回队列指针
Queue* create(int size) {
Queue *queue = (Queue*)malloc(sizeof(Queue));
if (queue == NULL) {
return NULL;
}
queue->data = (int*)malloc(sizeof(int) * size);
if (queue->data == NULL) {
free(queue);
return NULL;
}
queue->size = size;
queue->head = 0;
queue->tail = 0;
return queue;
}
// 入队操作,返回0表示成功,-1表示出错
int put(Queue *queue, int value) {
if (queue == NULL || queue->data == NULL) {
return -1;
}
if ((queue->tail + 1) % queue->size == queue->head) {
return -1; // 队列已满
}
queue->data[queue->tail] = value;
queue->tail = (queue->tail + 1) % queue->size;
return 0;
}
// 出队操作,返回0表示成功,-1表示出错
int get(Queue *queue, int *pvalue) {
if (queue == NULL || queue->data == NULL || pvalue == NULL) {
return -1;
}
if (queue->head == queue->tail) {
return -1; // 队列为空
}
*pvalue = queue->data[queue->head];
queue->head = (queue->head + 1) % queue->size;
return 0;
}
```
上述代码中,head指向队头,tail指向队尾,队列为空时head和tail相等,队列已满时(tail+1)%size等于head。在入队操作中,如果队列已满则返回-1;否则将value放入tail指向的位置,并将tail加1,如果tail等于size则置为0。在出队操作中,如果队列为空则返回-1;否则将head指向的值存入pvalue,将head加1,如果head等于size则置为0。
阅读全文
相关推荐



















