需要用到队列
queue.h
#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifdef __cplusplus
extern "C"{
#endif
struct queuenode
{
struct queuenode *next;
};
struct lqueue
{
struct queuenode header;//头结点
int size;
struct queuenode *rear;//尾指针
};
typedef void* linkqueue;
//初始化
linkqueue init_queue();
//入队
void push_queue(linkqueue queue, void *data);
//出队
void pop_queue(linkqueue queue);
//获得队头元素
void* get_top(linkqueue queue);
//获得队尾元素
void* get_back(linkqueue queue);
//大小
int get_size(linkqueue queue);
//销毁队列
void destory_queue(linkqueue queue);
#ifdef __cplusplus
}
#endif
queue.c
#define _CRT_SECURE_NO_WARNINGS
#include"queue.h"
//初始化
linkqueue init_queue()
{
struct lqueue *queue = malloc(sizeof(struct lqueue));
if (NULL == queue)
{
return;
}
queue->header.next = NULL;
queue->size = 0;
queue->rear = &(queue->header);
return queue;
}
//入队
void push_queue(linkqueue queue, void *data)
{
if (NULL == queue)
{
return;
}
if (NULL == data)
{
return;
}
struct lqueue *q = (struct lqueue *)queue;
struct queuenode *node = (struct queuenode *)data;
q->rear->next = node;
node->next = NULL;
q->rear = node;
q->size++;
}
//出队
void pop_queue(linkqueue queue)
{
if (NULL == queue)
{
return;
}
struct lqueue *q = (struct lqueue *)queue;
if (q->size == 0)
{
return;
}
if (q->size == 1)
{
q->header.next = NULL;
q->rear = &(q->header);
q->size--;
return;
}
struct queuenode *pfirst = q->header.next;
q->header.next = pfirst->next;
q->size--;
}
//获得队头元素
void* get_top(linkqueue queue)
{
if (NULL == queue)
{
return;
}
struct lqueue *q = (struct lqueue *)queue;
return q->header.next;
}
//获得队尾元素