《数据结构和算法:链表实现队列》

写出先入先出队列的结构体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 
");
        *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 
");
        *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 
",getQueueSize(queue));    //size : 5

    for(int i=0;i<initSize+1;i++)
    {
        get(queue,&data);
        printf("data : %d 
",data);      //0 1 2 3 4    queue is empty -1
    }

    printf("size : %d 
",getQueueSize(queue));   // 0

    put(queue,10);
    printf("size : %d 
",getQueueSize(queue));   //1

    put(queue,11);
    printf("size : %d 
",getQueueSize(queue));   //2

    get(queue,&data);
    printf("data : %d 
",data);                  //10

    get(queue,&data);
    printf("data : %d 
",data);                 //11

    printf("size : %d 
",getQueueSize(queue));  //0

}

int main(void)
{
    test_queue();
}
原文地址:https://www.cnblogs.com/xuxianshen/p/14196666.html