队列

Queue.h

#pragma once


#include <cstdio>
#include <cstdlib>

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

typedef struct _QUEUE
{
    int     size;
    NODE*   front;
    NODE*   back;
}QUEUE;

//入队
bool    push_back(QUEUE* queue, NODE node);
//插入
bool    insert(QUEUE* queue, int index, const char* name);
//出队
bool    pop_front(QUEUE* queue);
//是否对空
bool    empty(QUEUE queue);
//队元素数
int     size(QUEUE queue);
//清空
int     clear(QUEUE* queue);
//打印
void    show(QUEUE queue);

Queue.cpp

#define _CRT_SECURE_NO_WARNINGS
#include <windows.h>
#include <cstdio>
#include <iostream>
#include "Queue.h"


//插入
bool    insert(QUEUE* queue, int index, const char* name)
{
    NODE node = {0};
    node.index = index;
    (char*)(node.name) = (char*)malloc(8 * sizeof(char));
    strcpy(node.name,name);
    push_back(queue, node);
    return  true;
}
//入队
bool    push_back(QUEUE* queue, NODE node)
{
    NODE* pnode = (NODE*)malloc(sizeof(NODE));
    memset(pnode, 0, sizeof(NODE));
    memcpy(pnode, &node, sizeof(NODE));
    if (queue->front == NULL)
    {
    queue->front= pnode;
    queue->back = pnode;
    pnode->next = NULL;
    queue->size++;
    return true;
    }
    else{
        queue->back->next = pnode;
        queue->back = pnode;
        pnode->next = NULL;
        queue->size++;
        return true;
    }


}

//出队
bool    pop_front(QUEUE* queue)
{
    //if (queue->front == queue->back)//保留一个元素
    //{
    //  return true;
    //}
    NODE* pnode;
    pnode = queue->front;
    queue->front = pnode->next;

    queue->size--;
    free(pnode);
    return true;



}
//对空
bool    empty(QUEUE queue)
{
    if (queue.size == 0)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}
//队元素数
int     size(QUEUE queue)
{
     return printf("%d\n",queue.size);
}
//清空

int clear(QUEUE* queue)
{
    for (NODE* p = queue->front;;)
    {
        if (p == NULL)
        {
            return 1;
        }
        NODE* q = p;
        p = p->next;
        queue->front = p;
        free(q);
    }
    return 0;
}


//打印
void    show(QUEUE queue)
{
    NODE* pnode = queue.front;
    for (pnode; pnode != NULL; pnode = pnode->next)
    {
        printf("%d%s\n",pnode->index,pnode->name);
    }
    putchar('\n');
}

demo.cpp

#include "Queue.h"

int main()
{
    QUEUE queue = {0};


    insert(&queue, 12, "asd");
    insert(&queue, 13, "asd");
    insert(&queue, 14, "asd");
    insert(&queue, 15, "asd");
    show(queue);

    pop_front(&queue);
    pop_front(&queue);
    pop_front(&queue);
    pop_front(&queue);
    show(queue);

    printf("%d\n",empty(queue));

    size(queue);

    clear(&queue);
    size(queue);
    printf("%d\n", empty(queue));
    system("pause");
    return 0;
}

运行结果
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值