• 数据结构 队列_队列的实现与分析


    结构Queue是队列的数据结构。同栈一样,也用typedef List Queue 来定义。

     queue_init

    队列通过queue_init初始化。经过初始化的队列才能进行其他操作。因为队列本身就是一个链表,并且初始化过程相同,所以将queue_init定义成list_init。

    queue_init的运行时复杂度与list_init相同,都是O(1)。

    queue_destroy

    队列通过queue_destroy销毁。因为队列本身就是一个链表,并且销毁过程相同,所以将queue_destroy定义成list_destroy。

    queue_destroy的运行时复杂度与list_destroy相同都是O(n),n代表队列包含元素的个数。

    示例1:队列抽象数据类型的头文件

    /*queue.h*/
    #ifndef QUEUE_H
    #define QUEUE_H
    
    #include <stdlib.h>
    
    #include "list.h"
    
    /*将队列定义成链表*/
    typedef List Queue;
    
    /*公开接口*/
    #define queue_init list_init
    #define queue_destroy list_destroy
    
    int enqueue(Queue *queue,void *data);
    int dequeue(Queue *queue,void **data);
    
    #define queue_peek(queue)((queue)->head == NULL ? NULL : (queue)->head->data)
    #define queue_size list_size
    
    #endif

     queue_enqueue

    队列通过queue_enqueue向队列尾部插入元素。queue_enqueue调用list_ins_next方法来插入链表尾部指向data的元素。

    queue_enqueue运行时复杂度与list_ins_next相同,都是O(1)。

    queue_dequeue

    队列通过queue_dequeue从队列头部删除元素。queue_dequeue调用list_rem_next方法来删除链表的头元素,并将data指向已删除元素中的数据。

    queue_dequeue运行时复杂度与list_rem_next相同,都是O(1)。

    示例2:队列抽象数据类型的实现

    /*queue.c*/
    #include <stdlib.h>
    
    #include "list.h"
    #include "queue.h"
    
    /*queue_enqueue  往队列尾部插入元素*/
    int queue_enqueue(Queue *queue,const void *data)
    {
        return list_ins_next(queue,list_tail(queue),data);
    }
    
    /*queue_dequeue  从队列头部删除元素*/
    int queue_dequeue(Queue *queue,void **data)
    {
        return list_rem_next(queue,NULL,data);
    }

    queue_peek与queue_size

    这是队列的两个宏定义,实现队列的两种简单操作。queue_peek用来获取队列头元素的信息,而不使头元素出队;queue_size用来获取队列的大小。这两种操作都是通过访问Queue的结构成员来实现的。

    由于访问成员变量是一种简单的操作,只消耗固定的运行时间,所以这两种宏的运行时复杂度都为O(1)。

  • 相关阅读:
    移动端前端开发模型
    swift中高阶函数map、flatMap、filter、reduce
    函数式编程-构建
    Swift 4.0:访问级别(访问控制)
    swift内存管理
    swift where 的作用
    Swift 中的协议
    swift语言点评二十一-协议
    swift语言点评二十-扩展
    swift 20
  • 原文地址:https://www.cnblogs.com/idreamo/p/7870680.html
Copyright © 2020-2023  润新知