C 队列

#pragma once 
#include <stdlib.h>
#include <string.h>

typedef struct _NODE{
    int index;
    char* name;
    struct _NODE* next;

}NODE;

typedef struct _QUEUE{
    int size;
    NODE* front;//队头
    NODE* back;//队尾

}QUEUE;

int push_back(QUEUE* queue, NODE nodes);
int insert(QUEUE* queue, int index, const char* name);
int pop_front(QUEUE* queue);
int empty(QUEUE queue);
int size(QUEUE queue);
int clear(QUEUE* queue);
void show(QUEUE queue);
#include "Queue.h"
//入队
int push_back(QUEUE* queue, NODE nodes){

    NODE* node = (NODE*)malloc(sizeof(NODE));
    memset(node, 0, sizeof(NODE));
    node->name = (char*)malloc(8);
    memset(node->name, 0, sizeof(node->name));
    node->index = nodes.index;
    strcpy(node->name, nodes.name);
    node->next = NULL;

    if (queue->front == NULL)
    {
        queue->front = node;
        queue->back = node;
        return 1;
    }
    for (NODE* p = queue->front;; p = p->next)
    {
        if (p->next == NULL)
        {
            p->next = node;
            queue->back = node;
            return 1;
        }
    }
    return 0;
}
//插入
int insert(QUEUE* queue, int index, const char* name){

    NODE* node = (NODE*)malloc(sizeof(NODE));
    memset(node, 0, sizeof(NODE));
    node->name = (char*)malloc(8);
    memset(node->name, 0, sizeof(node->name));
    node->index = index;
    strcpy(node->name, name);
    node->next = NULL;
    return push_back(queue, *node);

}
//出队
int pop_front(QUEUE* queue){
    NODE* p = queue->front;
    if (p == NULL)
    {
        return 0;
    }
    if (p == queue->back)
    {
        queue->back = NULL;
    }
    queue->front = p->next;
    free(p);
    return 1;
}
//是否队为空
int empty(QUEUE queue){
    if (queue.front == NULL)
    {
        return 1;
    }
    return 0;
}
//队元素数
int _size(QUEUE queue){
    for (NODE* p = queue.front; p != NULL; p = p->next, queue.size++);
    return queue.size;
}
//清空
int clear(QUEUE* queue){
    for (; pop_front(queue) != 0;);
    return 1;
}
//打印
void show(QUEUE queue){
    for (NODE* p = queue.front; p != NULL; p = p->next)
    {
        printf("%d %s\n",p->index,p->name);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值