您的位置:首页 > 编程语言 > C语言/C++

c语言简单实现队列

2016-12-07 17:25 405 查看
#ifndef  _QUEUE_H_
#define  _QUEUE_H_

#if 1
typedef struct queue
{
int *buff;
int putIndex;
int getIndex;
int count;
int maxSize;
}Queue,*pQueue;
#else
#include "doulist.h"
typedef struct queue
{
Pnode head;
int maxSize;
int count;
}Queue;

#endif
Queue *createQueue(int maxSize);
int destroyQueue(Queue *pQueue);

int enQueue(Queue *pQueue, int data);
int deQueue(Queue *pQueue, int *pdata);

int count(Queue *pQueue);
int maxSize(Queue *pQueue);
int isEmpty(Queue *pQueue);
int isFull(Queue *pQueue);

#endif

---------------------------------------------头文件-------------------------------------------------------------

#include <stdio.h>
#include <stdlib.h>
#include "queue.h"
Queue *createQueue(int maxSize)
{
pQueue p = (pQueue)malloc(sizeof(Queue));
if (NULL == p)
{
return NULL;
}
p->buff = (int *)malloc(sizeof(int)*maxSize);
if (NULL == p->buff)
{
free(p);
return NULL;
}
p->putIndex = 0;
p->getIndex = 0;
p->count = 0;
p->maxSize = maxSize;
}
int destroyQueue(Queue *pQueue)
{
if (NULL == pQueue)
{
return -1;
}
if (NULL == pQueue->buff)
{
return -2;
}
free(pQueue->buff);
free(pQueue);
return 0;
}

int enQueue(Queue *pQueue, int data)
{
if (NULL == pQueue)
{
return -1;
}
if (NULL == pQueue->buff)
{
return -2;
}
if (isFull(pQueue))
{
return -3;
}
if (pQueue->putIndex == pQueue->maxSize)
{
pQueue->putIndex = 0;
}
pQueue->buff[pQueue->putIndex] = data;
pQueue->putIndex++;
pQueue->count++;
}
int deQueue(Queue *pQueue, int *pdata)
{
if (NULL == pQueue)
{
return -1;
}
if (NULL == pQueue->buff)
{
return -2;
}
if (isEmpty(pQueue))
{
*pdata = 0;
return -3;
}
if (pQueue->getIndex == pQueue->maxSize)
{
pQueue->getIndex = 0;
}
*pdata = pQueue->buff[pQueue->getIndex];
pQueue->getIndex++;
pQueue->count--;
}

int count(Queue *pQueue)
{
if (NULL == pQueue)
{
return -1;
}
return pQueue->count;
}

int maxSize(Queue *pQueue)
{
if (NULL == pQueue)
{
return -1;
}
return pQueue->maxSize;
}
int isEmpty(Queue *pQueue)
{
if (NULL == pQueue)
{
return -1;
}
if (0==pQueue->count)
{
return 1;
}
return 0;
}
int isFull(Queue *pQueue)
{
if (NULL == pQueue)
{
return -1;
}
if (pQueue->count == pQueue->maxSize)
{
return 1;
}
return 0;
}

int main()
{
pQueue p = createQueue(10);
int data = 0;
enQueue(p, 1);
enQueue(p, 2);
enQueue(p, 3);
enQueue(p, 4);
enQueue(p, 5);
enQueue(p, 6);
enQueue(p, 7);
enQueue(p, 8);
enQueue(p, 9);
enQueue(p, 10);
printf("count=%d getindex=%d, putindex=%d ", p->count, p->getIndex, p->putIndex);
deQueue(p, &data);
printf("data=%d,count=%d getindex=%d, putindex=%d\n", data, p->count, p->getIndex, p->putIndex);

printf("count=%d getindex=%d, putindex=%d ", p->count, p->getIndex, p->putIndex);
deQueue(p, &data);
printf("data=%d,count=%d getindex=%d, putindex=%d\n", data, p->count, p->getIndex, p->putIndex);

enQueue(p, 12);
enQueue(p, 17);

for (int i = 0; i < 15; i++)
{
printf("count=%d getindex=%d, putindex=%d ", p->count, p->getIndex, p->putIndex);
deQueue(p, &data);
printf("data=%d,count=%d getindex=%d, putindex=%d\n", data, p->count,p->getIndex,p->putIndex);
}

getchar();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: