#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <malloc.h>
#include<assert.h>
#define N 10
typedef struct Queue
{
int nHead;
int nTail;
int nLen;
int *pnArr;
}Queue, *PQueue; //创建数组式队列,这里包含队列存储的个数,就是长度nlen,初始时,ntop和ntail表示数据存储在第几个位置,
PQueue Create(int nLen)
{
if (nLen <= 0)
{
return NULL;
}
PQueue pQueue = (PQueue)malloc(sizeof(Queue)); //创建一个长度为nlen的队列,为该队列开辟内存空间
pQueue->nLen = nLen; //初始化对象中数据成员
pQueue->nHead = 0; //
pQueue->nTail = 0; //指向队列最后一个数据的下一个位置
pQueue->pnArr = (int *)malloc(sizeof(int) * nLen); //为存储数据的指针开辟出足够存储nlen的int数据的空间
return pQueue;
}
void EnQueue(PQueue pQueue, int nValue) //入队列操作
{
if (NULL == pQueue || pQueue->pnArr == NULL) //判断队列是不是空的,是否建立
{
printf("队列未创建成功!\n");
return;
}
if (pQueue->nTail == pQueue->nLen) //判断队列是不是满的,,,如果是满的则队尾所在的位置正好是队列的长度
{
printf("队列已满!\n");
return;
}
pQueue->pnArr[pQueue->nTail] = nValue; //在存储数据的指针中添加数据
(pQueue->nTail)++; //队尾的位置加1
}
int DeQueue(PQueue pQueue) //出队列操作
{
if (NULL == pQueue || pQueue->pnArr == NULL)
{
printf("队列未创建成功!\n");
assert(0);
}
if (pQueue->nHead == pQueue->nTail)
{
printf("队列已空!\n");
assert(0);
}
int nValue = pQueue->pnArr[pQueue->nHead]; //从队首开始输出数据,队首的位置添加1
(pQueue->nHead)++;
return nValue;
}
bool IsEmpty(PQueue pQueue)
{
return pQueue->nHead == pQueue->nTail; //队列是不是空表示队首和队尾在同一位置
}
bool IsFull(PQueue pQueue)
{
return pQueue->nTail == pQueue->nLen; //队列蛮的条件,表示队尾 的位置正好是队列的长度
}
void Destroy(PQueue pQueue)
{
free(pQueue->pnArr);
pQueue->pnArr = NULL;
free(pQueue); //释放队列指针的内存
pQueue = NULL;
}
int main()
{
PQueue pQueue = Create(N);
for (int i = 0; i < N; i++)
{
EnQueue(pQueue, i);
}
printf("%d \n", IsFull(pQueue));
while (!IsEmpty(pQueue))
{
printf("%d ", DeQueue(pQueue));
}
system("pause");
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <malloc.h>
#include<assert.h>
#define N 10
typedef struct Queue
{
int nHead;
int nTail;
int nLen;
int *pnArr;
}Queue, *PQueue; //创建数组式队列,这里包含队列存储的个数,就是长度nlen,初始时,ntop和ntail表示数据存储在第几个位置,
PQueue Create(int nLen)
{
if (nLen <= 0)
{
return NULL;
}
PQueue pQueue = (PQueue)malloc(sizeof(Queue)); //创建一个长度为nlen的队列,为该队列开辟内存空间
pQueue->nLen = nLen; //初始化对象中数据成员
pQueue->nHead = 0; //
pQueue->nTail = 0; //指向队列最后一个数据的下一个位置
pQueue->pnArr = (int *)malloc(sizeof(int) * nLen); //为存储数据的指针开辟出足够存储nlen的int数据的空间
return pQueue;
}
void EnQueue(PQueue pQueue, int nValue) //入队列操作
{
if (NULL == pQueue || pQueue->pnArr == NULL) //判断队列是不是空的,是否建立
{
printf("队列未创建成功!\n");
return;
}
if (pQueue->nTail == pQueue->nLen) //判断队列是不是满的,,,如果是满的则队尾所在的位置正好是队列的长度
{
printf("队列已满!\n");
return;
}
pQueue->pnArr[pQueue->nTail] = nValue; //在存储数据的指针中添加数据
(pQueue->nTail)++; //队尾的位置加1
}
int DeQueue(PQueue pQueue) //出队列操作
{
if (NULL == pQueue || pQueue->pnArr == NULL)
{
printf("队列未创建成功!\n");
assert(0);
}
if (pQueue->nHead == pQueue->nTail)
{
printf("队列已空!\n");
assert(0);
}
int nValue = pQueue->pnArr[pQueue->nHead]; //从队首开始输出数据,队首的位置添加1
(pQueue->nHead)++;
return nValue;
}
bool IsEmpty(PQueue pQueue)
{
return pQueue->nHead == pQueue->nTail; //队列是不是空表示队首和队尾在同一位置
}
bool IsFull(PQueue pQueue)
{
return pQueue->nTail == pQueue->nLen; //队列蛮的条件,表示队尾 的位置正好是队列的长度
}
void Destroy(PQueue pQueue)
{
free(pQueue->pnArr);
pQueue->pnArr = NULL;
free(pQueue); //释放队列指针的内存
pQueue = NULL;
}
int main()
{
PQueue pQueue = Create(N);
for (int i = 0; i < N; i++)
{
EnQueue(pQueue, i);
}
printf("%d \n", IsFull(pQueue));
while (!IsEmpty(pQueue))
{
printf("%d ", DeQueue(pQueue));
}
system("pause");
return 0;
}