code如下
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#define QUEUESIZE 5
#define OK 1
#define PARAMETER "%d\n"
typedef int dataType;
typedef int status;
typedef struct sQeue
{
dataType *base;
int front;
int rear;
}sQueue, * sQueuePtr;
/***************initial a link queue******************/
status initialSQueue(sQueuePtr queue)
{
if(NULL == queue)
{
printf("the queue is null\n");
exit(-1);
}
queue->base = (dataType *)malloc(sizeof(dataType) * QUEUESIZE);
if(NULL == queue->base)
{
printf("allocate memory error in initialQueue.\n");
exit(-1);
}
queue->front = queue->rear = 0;
return OK;
}
/***************length******************/
int lengthSQueue(sQueuePtr queue)
{
return (queue->rear - queue->front + QUEUESIZE) % QUEUESIZE;
}
/***************insert******************/
status insertSQueue(sQueuePtr queue, dataType dataInput)
{
if(NULL == queue)
{
printf("the queue is null\n");
return -1;
}
if((queue->rear + 1) % QUEUESIZE == queue->front)
{
printf("the sQueue is full.\n");
exit(-1);
}
*(queue->base + queue->rear) = dataInput;
queue->rear = (queue->rear + 1) % QUEUESIZE;
return OK;
}
/***************delete front element******************/
status deleteSQueue(sQueuePtr queue, dataType * dataOutput)
{
if(NULL == queue || NULL == dataOutput)
{
printf("invalid parameter in deleteQueue\n");
exit(-1);
}
if(queue->front == queue->rear)
{
printf("the queue is already null\n");
exit(-1);
}
*dataOutput = *(queue->base + queue->front);
queue->front = (queue->front + 1) % QUEUESIZE;
return OK;
}
/***************traversal *****************/
status traversalSQueue(sQueuePtr queue)
{
int tmp;
if(NULL == queue)
{
printf("queue is null is traversalQueue\n");
exit(-1);
}
tmp = queue->front;
while(tmp != queue->rear)
{
printf("the data is %d\n", queue->base[tmp]);
tmp = (tmp + 1) % QUEUESIZE;
}
return OK;
}
int main(void)
{
sQueue q;
dataType element;
(void)memset((void*)&q, 0, sizeof(sQueue));
if(OK != initialSQueue(&q))
{
printf("error for initial in function main\n");
return -1;
}
insertSQueue(&q, 10);
insertSQueue(&q, 12);
insertSQueue(&q, 8);
insertSQueue(&q, 9);
traversalSQueue(&q);
deleteSQueue(&q, &element);
printf(PARAMETER, element);
deleteSQueue(&q, &element);
printf(PARAMETER, element);
insertSQueue(&q, 6);
insertSQueue(&q, 7);
traversalSQueue(&q);
//insertQueue(&q, 10);
//traversalQueue(&q);
return OK;
}