ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2020-12-27 11:01:26  阅读:204  来源: 互联网

标签:node queue NULL nodeList 队列 Queue 链表 int 数据结构


写出先入先出队列的结构体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();
}

 

标签:node,queue,NULL,nodeList,队列,Queue,链表,int,数据结构
来源: https://www.cnblogs.com/xuxianshen/p/14196666.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有