NicholasAdamou

Doubly Linked List in Go

Oct 9th, 2019
345
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.92 KB | None | 0 0
  1. package main
  2.  
  3. /**
  4.  * Project 3: programming in Go lang
  5.  * Using Go Lang, write a program that:
  6.  *    - fills an array with random integers in the range 10 to 99.
  7.  *    - builds a Doubly LinkedList by inserting the integers in the array into the data structure.
  8.  *    - finds the length of a given LinkedList.
  9.  *    - finds the minimum value in a given LinkedList.
  10.  *
  11.  * author: Nicholas Adamou
  12.  * date: 10/9/19
  13.  * Class: CSC-315
  14.  */
  15.  
  16.  
  17. import (
  18.     "fmt"
  19.     "math/rand"
  20. )
  21.  
  22. type Node struct {
  23.     prev *Node
  24.     value int
  25.     next *Node
  26. }
  27.  
  28. func insert(LinkedList *Node, value int) *Node {
  29.     if LinkedList == nil {
  30.         return LinkedList
  31.     }
  32.  
  33.     for node := LinkedList; node != nil; node = node.next {
  34.         if node.next == nil {
  35.             if node.prev != nil {
  36.                 node.next = &Node{ node.prev, value, nil}
  37.             } else {
  38.                 node.next = &Node{nil, value, nil}
  39.             }
  40.  
  41.             return LinkedList
  42.         }
  43.     }
  44.  
  45.     return LinkedList
  46. }
  47.  
  48. func findMinimum(LinkedList *Node) (minimum int) {
  49.     for node := LinkedList; node != nil; node = node.next {
  50.         if node.next != nil {
  51.             if node.value < node.next.value {
  52.                 minimum = node.value
  53.             }
  54.         }
  55.     }
  56.  
  57.     return
  58. }
  59.  
  60. func length(LinkedList *Node) (count int) {
  61.     for node := LinkedList; node != nil; node = node.next {
  62.         count += 1
  63.     }
  64.  
  65.     return
  66. }
  67.  
  68. func print(LinkedList *Node) {
  69.     for node := LinkedList; node != nil; node = node.next {
  70.         if node.next == nil {
  71.             fmt.Printf(" %d", node.value)
  72.         } else {
  73.             fmt.Printf(" %d ->", node.value)
  74.         }
  75.     }
  76.  
  77.     fmt.Println()
  78. }
  79.  
  80. func random(max int, min int) int {
  81.     return rand.Int() % (max - min + 1) + min
  82. }
  83.  
  84. func main() {
  85.     const MIN = 10
  86.     const MAX = 99
  87.     const SIZE = 10
  88.  
  89.     var LinkedList *Node = &Node{nil, random(MAX, MIN), nil}
  90.  
  91.     for i := 1; i < SIZE; i++ {
  92.         insert(LinkedList, random(MAX, MIN))
  93.     }
  94.  
  95.     print(LinkedList)
  96.  
  97.     fmt.Printf("\nLength of LinkedList: %d\n", length(LinkedList))
  98.     fmt.Printf("Minimum value: %d\n", findMinimum(LinkedList))
  99. }
Advertisement