list.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. package main
  2. import (
  3. "container/list"
  4. "fmt"
  5. )
  6. func printList(l *list.List) {
  7. for temp := l.Front(); temp != nil; temp = temp.Next() {
  8. fmt.Printf("%v ", temp.Value)
  9. }
  10. }
  11. func main() {
  12. // foo1()
  13. foo2()
  14. /*
  15. mylist := list.New()
  16. mylist.PushBack(0)
  17. mylist.PushBack(1)
  18. mylist.PushBack(2)
  19. mylist.PushBack(3)
  20. // Получаем указатель на элемент который добавили (*Element)
  21. elem3 := mylist.PushBack(4)
  22. printList(mylist)
  23. // удаляем элемент '3' по указателю (*Element)
  24. mylist.Remove(elem3)
  25. // так же можем воспользоваться методом Front()/Back() чтобы
  26. // получить первый/последний элемент
  27. mylist.Remove(mylist.Front())
  28. fmt.Printf("\nПосле удаления\n")
  29. printList(mylist)
  30. // mylist.PushFront(1)
  31. // mylist.PushFront(2)
  32. // mylist.PushFront(3)
  33. */
  34. }
  35. func foo1() {
  36. // Создаем контейнер list и добавляем в него элементы
  37. mylist := list.New()
  38. mylist.PushBack(2)
  39. mylist.PushBack(5)
  40. mylist.PushBack(3)
  41. mylist.PushBack(11)
  42. mylist.PushBack(12)
  43. // Проходимся по элементам и удаляем те, которые меньше 10
  44. for e := mylist.Front(); e != nil; {
  45. // Запоминаем следующий элемент перед удалением текущего
  46. next := e.Next()
  47. if e.Value.(int) < 10 {
  48. // Удалялем текущий элемент из списка
  49. mylist.Remove(e)
  50. }
  51. e = next // Переходим к следующему элементу
  52. }
  53. // Выводим список после удаления элементов
  54. for e := mylist.Front(); e != nil; e = e.Next() {
  55. fmt.Println(e.Value)
  56. }
  57. }
  58. // ---------------------------------------------------------------
  59. func foo2() {
  60. queue := list.New()
  61. Push(1, queue)
  62. Push(2, queue)
  63. Push(3, queue)
  64. printQueue(queue)
  65. Pop(queue)
  66. printQueue(queue)
  67. // fmt.Println(Pop(queue))
  68. // printQueue(queue)
  69. }
  70. // Добавление элементов в очередь
  71. func Push(elem interface{}, queue *list.List) {
  72. queue.PushBack(elem)
  73. }
  74. // Удуление элемента и его возврат
  75. func Pop(queue *list.List) interface{} {
  76. if queue.Front() != nil {
  77. return nil
  78. }
  79. return queue.Remove(queue.Front())
  80. }
  81. // Печать очереди в одну строку без пробелов
  82. func printQueue(queue *list.List) {
  83. for temp := queue.Front(); temp != nil; temp = temp.Next() {
  84. fmt.Print(temp.Value)
  85. }
  86. }