package main
import (
"fmt"
)
type Node struct {
Value interface{}
next *Node
}
func NewNode(value interface{}) *Node {
return &Node{Value:value, next: nil}
}
type Queue struct {
first *Node
last *Node
length int
}
func (q *Queue) peek() *Node {
return q.first
}
func (q *Queue) enqueue(value interface{}) {
newNode := NewNode(value)
if q.length == 0 {
q.first = newNode
q.last = newNode
} else {
q.last.next = newNode
q.last = newNode
}
q.length++
q.print()
}
func (q *Queue) print() {
fmt.Printf("queue length is %d and elements in are..\n", q.length)
node := q.first
for node != nil {
fmt.Printf("%s ", node.Value)
node = node.next
}
fmt.Println()
}
func (q *Queue) dqueue() interface{} {
if q.first == nil {
return nil
}
val := q.first.Value
q.first = q.first.next
q.length--
return val
}
func (q *Queue) isempty() bool {
if q.length > 0 {
return true
}
return false
}
func main() {
q := Queue{}
fmt.Println(q.peek())
q.enqueue("Apple")
q.enqueue("Banana")
q.enqueue("Orange")
fmt.Println ("element dqueue is : ", q.dqueue())
fmt.Println ("element dqueue is : ", q.dqueue())
fmt.Println ("element dqueue is : ", q.dqueue())
fmt.Println ("element dqueue is : ", q.dqueue())
fmt.Println("Peek is : " , q.peek())
q.print()
}