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;
}
运行结果