顺序循环队列
队头插入元素,队尾删除元素
本来应该判空和判断是否存满的条件都是:队头 = 队尾,但这样就没办法区分了,所以,就牺牲一个空间(比如长度为10,但只能存9个),这样判断是否存满就变成了队头 = (队尾+1)% 队列长度。
顺序循环队列判空条件:队头 = 队尾
顺序循环队列判断是否存满条件:队头 = (队尾+1)% 队列长度

1.定义结构体

2.创建
SeqQueue *CreateSeqQueue(int MaxLen)
{
    SeqQueue *pTmpQueue = NULL;
    
    pTmpQueue = malloc(sizeof(SeqQueue));
    if (NULL == pTmpQueue)
    {
        return NULL;
    }
    pTmpQueue->Head = pTmpQueue->Tail = 0;
    pTmpQueue->Len = MaxLen;
    pTmpQueue->pData = malloc(sizeof(DataType) * MaxLen);
    if (NULL == pTmpQueue->pData)
    {
        return NULL;
    }
    return pTmpQueue;
}3.判空
int IsEmptySeqQueue(SeqQueue *pTmpQueue)
{
    return pTmpQueue->Head == pTmpQueue->Tail ? 1 : 0;
}4.判断是否存满
int IsFullSeqQueue(SeqQueue *pTmpQueue)
{
    return (pTmpQueue->Tail + 1) % pTmpQueue->Len == pTmpQueue->Head ? 1 : 0;
}5.入队
int EnterSeqQueue(SeqQueue *pTmpQueue, DataType TmpData)
{
    if (IsFullSeqQueue(pTmpQueue))
    {
        return -1;
    }
    pTmpQueue->pData[pTmpQueue->Tail] = TmpData;
    pTmpQueue->Tail = (pTmpQueue->Tail + 1) % pTmpQueue->Len;
    return 0;
}6.出队
DataType QuitSeqQueue(SeqQueue *pTmpQueue)
{
    DataType TmpData;
    TmpData = pTmpQueue->pData[pTmpQueue->Head];
    pTmpQueue->Head = (pTmpQueue->Head + 1) % pTmpQueue->Len;
    return TmpData;
}7.销毁
int DestroySeqQueue(SeqQueue **ppTmpQueue)
{
    free((*ppTmpQueue)->pData);
    free(*ppTmpQueue);
    *ppTmpQueue = NULL;
    return 0;
}


















