zoukankan      html  css  js  c++  java
  • 《数据结构和算法:链表实现队列》

    写出先入先出队列的结构体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();
    }
  • 相关阅读:
    二维数组最大关联子数组
    四则运算(终极版)
    最大子数组
    四则运算(三) 记录日志
    四则运算(三)
    四则运算记录日志
    四则运算(二)
    简单web四则运算出题
    Daily Scrum
    Daily Scrum
  • 原文地址:https://www.cnblogs.com/xuxianshen/p/14196666.html
Copyright © 2011-2022 走看看