golang实现队列操作

爱被打了一巴掌 2022-05-31 00:45 560阅读 0赞

队列和栈一样也是表。然而队列是插入在一段进行而删除在另一端进行。

队列是先进先出(FIFO)的。

下面用切片实现队列操作:

  1. package main
  2. import "fmt"
  3. type Element interface{}
  4. type Queue interface {
  5. Offer(e Element) //向队列中添加元素
  6. Poll() Element //移除队列中最前面的元素
  7. Clear() bool //清空队列
  8. Size() int //获取队列的元素个数
  9. IsEmpty() bool //判断队列是否是空
  10. }
  11. type sliceEntry struct{
  12. element []Element
  13. }
  14. func NewQueue() *sliceEntry {
  15. return &sliceEntry{}
  16. }
  17. //向队列中添加元素
  18. func (entry *sliceEntry) Offer(e Element) {
  19. entry.element = append(entry.element,e)
  20. }
  21. //移除队列中最前面的额元素
  22. func (entry *sliceEntry) Poll() Element {
  23. if entry.IsEmpty() {
  24. fmt.Println("queue is empty!")
  25. return nil
  26. }
  27. firstElement := entry.element[0]
  28. entry.element = entry.element[1:]
  29. return firstElement
  30. }
  31. func (entry *sliceEntry) Clear() bool {
  32. if entry.IsEmpty() {
  33. fmt.Println("queue is empty!")
  34. return false
  35. }
  36. for i:=0 ; i< entry.Size() ; i++ {
  37. entry.element[i] = nil
  38. }
  39. entry.element = nil
  40. return true
  41. }
  42. func (entry *sliceEntry) Size() int {
  43. return len(entry.element)
  44. }
  45. func (entry *sliceEntry) IsEmpty() bool {
  46. if len(entry.element) == 0 {
  47. return true
  48. }
  49. return false
  50. }
  51. func main() {
  52. queue := NewQueue()
  53. for i := 0; i < 50; i++ {
  54. queue.Offer(i)
  55. }
  56. fmt.Println("size:",queue.Size())
  57. fmt.Println("移除最前面的元素:",queue.Poll())
  58. fmt.Println("size:",queue.Size())
  59. fmt.Println("清空:",queue.Clear())
  60. for i := 0; i < 50; i++ {
  61. queue.Offer(i)
  62. }
  63. fmt.Println(queue.Poll())
  64. fmt.Println(queue.Poll())
  65. fmt.Println(queue.Size())
  66. }

发表评论

表情:
评论列表 (有 0 条评论,560人围观)

还没有评论,来说两句吧...

相关阅读

    相关 golang实现操作

    栈是限制插入和删除只能在一个位置上进行的表,该位置是表的末端,叫做栈顶。 栈有时又叫LIFO(先进后出)表。 对栈的操作有Push(进栈)和Pop(出栈),前者相当于插