写出先入先出队列的结构体Queue定义,并实现以下函数:(15分)
1,Queue *create(int size):创建一个能放size个int类型的队列,返回队列的指针。
2,int put(Queue *queue, int value):将value入队,返回0表示成功,-1表示出错。
3,int get(Queue *queue, int *pvalue):将数据出队并存入pvalue,返回0表示成功,-1表示出错。
typedef struct node_t
{
int data;
struct node_t *next;
}nodeList;
typedef struct queue_t
{
nodeList *head;
nodeList *end;
int qSize;
}Queue;
Queue *create(int size)
{
Queue *queue = NULL;
nodeList *node = NULL;
int i = 0;
queue = (Queue *)malloc(sizeof(Queue));
if(NULL == queue)
{
perror("queue malloc:");
return NULL;
}
memset(queue,0,sizeof(Queue));
node = (nodeList *)malloc(sizeof(nodeList));
if(NULL == node)
{
perror("node malloc:");
return NULL;
}
memset(node,0,sizeof(nodeList));
queue->head = node;
queue->end = node;
for(i=1;i<size;i++)
{
node = (nodeList *)malloc(sizeof(nodeList));
if(NULL == node)
{
perror("node malloc:");
return queue;
}
memset(node,0,sizeof(nodeList));
node->data = i;
queue->end->next = node;
queue->end = node;
}
queue->qSize = size;
return queue;
}
int put(Queue *queue, int value)
{
nodeList *node = NULL;
node = (nodeList *)malloc(sizeof(nodeList));
if(NULL == node)
{
perror("malloc:");
return -1;
}
memset(node,0,sizeof(nodeList));
node->data = value;
queue->qSize++;
if(NULL == queue->head)
{
queue->head = node;
queue->end = node;
}
else
{
queue->end->next = node;
}
return 0;
}
int get(Queue *queue, int *pvalue)
{
nodeList *node = NULL;
if(queue->qSize == 0)
{
printf(" queue is empty \n");
*pvalue = -1;
return -1;
}
*pvalue = queue->head->data;
node = queue->head->next;
free(queue->head);
queue->head = node;
queue->qSize--;
return 0;
}
测试:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct node_t
{
int data;
struct node_t *next;
}nodeList;
typedef struct queue_t
{
nodeList *head;
nodeList *end;
int qSize;
}Queue;
Queue *create(int size)
{
Queue *queue = NULL;
nodeList *node = NULL;
int i = 0;
queue = (Queue *)malloc(sizeof(Queue));
if(NULL == queue)
{
perror("queue malloc:");
return NULL;
}
memset(queue,0,sizeof(Queue));
node = (nodeList *)malloc(sizeof(nodeList));
if(NULL == node)
{
perror("node malloc:");
return NULL;
}
memset(node,0,sizeof(nodeList));
queue->head = node;
queue->end = node;
for(i=1;i<size;i++)
{
node = (nodeList *)malloc(sizeof(nodeList));
if(NULL == node)
{
perror("node malloc:");
return queue;
}
memset(node,0,sizeof(nodeList));
node->data = i;
queue->end->next = node;
queue->end = node;
}
queue->qSize = size;
return queue;
}
int put(Queue *queue, int value)
{
nodeList *node = NULL;
node = (nodeList *)malloc(sizeof(nodeList));
if(NULL == node)
{
perror("malloc:");
return -1;
}
memset(node,0,sizeof(nodeList));
node->data = value;
queue->qSize++;
if(NULL == queue->head)
{
queue->head = node;
queue->end = node;
}
else
{
queue->end->next = node;
}
return 0;
}
int get(Queue *queue, int *pvalue)
{
nodeList *node = NULL;
if(queue->qSize == 0)
{
printf(" queue is empty \n");
*pvalue = -1;
return -1;
}
*pvalue = queue->head->data;
node = queue->head->next;
free(queue->head);
queue->head = node;
queue->qSize--;
return 0;
}
int getQueueSize(Queue *queue)
{
return queue->qSize;
}
int test_queue(void)
{
Queue *queue = NULL;
int data = -1;
int initSize = 5;
queue = create(initSize);
printf("size : %d \n",getQueueSize(queue)); //size : 5
for(int i=0;i<initSize+1;i++)
{
get(queue,&data);
printf("data : %d \n",data); //0 1 2 3 4 queue is empty -1
}
printf("size : %d \n",getQueueSize(queue)); // 0
put(queue,10);
printf("size : %d \n",getQueueSize(queue)); //1
put(queue,11);
printf("size : %d \n",getQueueSize(queue)); //2
get(queue,&data);
printf("data : %d \n",data); //10
get(queue,&data);
printf("data : %d \n",data); //11
printf("size : %d \n",getQueueSize(queue)); //0
}
int main(void)
{
test_queue();
}