首页 >后端开发 >Golang >重新学习CS基础知识——实现队列

重新学习CS基础知识——实现队列

Patricia Arquette
Patricia Arquette原创
2024-10-16 06:10:30545浏览

Relearning basics of CS - Implementing Queue

你有没有站在队列里,队列数据结构也做同样的事情。当你想在你最喜欢的自助餐厅点餐时,你站在队伍的最后,然后你就可以继续排队并离开。

CS 中的队列数据结构执行相同的功能。队列数据结构是先进先出的数据结构。队列数据结构可以使用两个基本函数 Enqueue 和 Dequeue 来构建,这两个函数基本上是添加到列表和从列表中删除。

现实生活中的例子

在计算机科学的现实世界中,队列构成了以下软件组件的支柱

  • 任务调度
  • 事件处理
  • 异步通信等

虽然一个简单且易于可视化的组件是

  1. 播放列表中歌曲的队列
  2. 按数据通过网络发送的顺序排列的队列等

执行

package main

import (
    "fmt"
    "errors"
)

type Queue struct{
    Elements []int
    Size int
}

func (q *Queue) Enqueue(value int){
    if q.GetLength() == q.Size { 
        fmt.Println("Overflow") 
        return
    } 
    q.Elements = append(q.Elements, value) 
}

func (q *Queue) Dequeue() int {
    if q.IsEmpty() { 
        fmt.Println("UnderFlow") 
        return 0
    } 
    element := q.Elements[0] 
    if q.GetLength() == 1 { 
        q.Elements = nil 
        return element 
    } 
    q.Elements = q.Elements[1:] 
    return element
}

func (q *Queue) GetLength() int { 
    return len(q.Elements) 
} 

func (q *Queue) IsEmpty() bool { 
    return len(q.Elements) == 0
} 

func (q *Queue) Peek() (int, error) { 
    if q.IsEmpty() { 
        return 0, errors.New("empty queue") 
    } 
    return q.Elements[0], nil 
} 

复杂

时间复杂度 - 入队和出队的 O(1)
空间复杂度 - 入队和出队的 O(1)

参考

参考 - https://www.geeksforgeeks.org/queue-in-go-language/

以上是重新学习CS基础知识——实现队列的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn