无头结点单链表基本操作
队列的思维导图
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/e4c03ef6cf38ab57c0f375a48fdcbd6c.png)
循环队列的功能实现
#pragma once
#include <stdio.h>
#include <assert.h>
#define _Maxsize 8
typedef int DataType;
typedef struct Queue
{
DataType _arr[_Maxsize];
DataType _front;
DataType _back;
DataType count;
}Queue;
void QueueInit(Queue* s);
void QueuePush(Queue* s,DataType);
void QueuePop(Queue* s);
int QueueSize(Queue* s);
int QueueEmpty(Queue* s);
DataType Queuefront(Queue* s);
DataType Queueback(Queue* s);
#define _CRT_SECURE_NO_WARNINGS 1
#include "Queue.h"
void QueueInit(Queue* s)
{
assert(s);
s->_back = s->_front = 0;
s->count = 0;
}
void QueuePush(Queue* s,DataType data)
{
assert(s);
if(s->count == _Maxsize)
{
printf("队列数据已满,不能插入!!!\n");
return;
}
else
{
s->_arr[s->_back++] = data;
if(s->_back == _Maxsize)
s->_back = 0;
s->count++;
}
}
void QueuePop(Queue* s)
{
assert(s);
if(s->count == 0)
{
printf("队列的中的数据为空,不能出队列!!!\n");
return;
}
else
{
++(s->_front);
if(s->_front == _Maxsize)
s->_front = 0;
--(s->count);
}
}
int QueueSize(Queue* s)
{
assert(s);
return s->count;
}
int QueueEmpty(Queue* s)
{
assert(s);
return 0 == s->count;
}
DataType Queuefront(Queue* s)
{
assert(s);
if(s->count == 0)
{
printf("队列数据为空,无队头数据!!!\n");
return -1;
}
return s->_arr[s->_front];
}
DataType Queueback(Queue* s)
{
assert(s);
if(s->count == 0)
{
printf("队列数据为空,无队尾数据!!!\n");
return -1;
}
if(0 != s->_back)
return s->_arr[s->_back-1];
else
return s->_arr[_Maxsize-1];
}
#define _CRT_SECURE_NO_WARNINGS 1
#include "Queue.h"
void Queuetest();
int main()
{
Queuetest();
return 0;
}
void Queuetest()
{
Queue D;
QueueInit(&D);
QueuePush(&D,1);
QueuePush(&D,2);
QueuePush(&D,3);
QueuePush(&D,4);
QueuePush(&D,5);
QueuePush(&D,6);
QueuePush(&D,7);
QueuePush(&D,8);
printf("QueueSize = %d\n",QueueSize(&D));
printf("Queuefront = %d\n",Queuefront(&D));
printf("Queueback = %d\n",Queueback(&D));
QueuePop(&D);
QueuePop(&D);
QueuePop(&D);
printf("QueueSize = %d\n",QueueSize(&D));
printf("Queuefront = %d\n",Queuefront(&D));
printf("Queueback = %d\n",Queueback(&D));
}