Skip to content

Instantly share code, notes, and snippets.

@iamganeshagrawal
Created May 24, 2023 12:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save iamganeshagrawal/e30fb2baee8435be0420a694ba7bdb01 to your computer and use it in GitHub Desktop.
Save iamganeshagrawal/e30fb2baee8435be0420a694ba7bdb01 to your computer and use it in GitHub Desktop.
Golang | Queue
package main
type Queue interface {
Size() int
IsEmpty() bool
Enqueue(v interface{})
Dequeue() interface{}
}
type node struct {
value interface{}
next *node
}
type queue struct {
head *node
tail *node
size int
}
func NewQueue() Queue {
return &queue{
head: nil,
tail: nil,
size: 0,
}
}
func (q *queue) Size() int {
return q.size
}
func (q *queue) IsEmpty() bool {
return q.size == 0
}
func (q *queue) Enqueue(v interface{}) {
nn := &node{
value: v,
next: nil,
}
if q.head == nil && q.tail == nil {
q.head = nn
q.tail = nn
} else {
q.tail.next = nn
q.tail = nn
}
q.size++
}
func (q *queue) Dequeue() interface{} {
if q.size == 0 {
return nil
}
var temp *node
if q.size == 1 {
temp = q.head
q.head = nil
q.tail = nil
} else {
temp = q.head
q.head = q.head.next
temp.next = nil
}
q.size--
return temp.value
}
@ganeshagrawal55
Copy link

type Queue interface {
	Size() int
	IsEmpty() bool
	Enqueue(v interface{})
	Dequeue() interface{}
        Peek() interface{}
}

type node struct {
	value interface{}
	next  *node
}

type queue struct {
	head *node
	tail *node
	size int
}

func NewQueue() Queue {
	return &queue{
		head: nil,
		tail: nil,
		size: 0,
	}
}

func (q *queue) Size() int {
	return q.size
}

func (q *queue) IsEmpty() bool {
	return q.size == 0
}

func (q *queue) Enqueue(v interface{}) {
	nn := &node{
		value: v,
		next:  nil,
	}

	if q.head == nil && q.tail == nil {
		q.head = nn
		q.tail = nn
	} else {
		q.tail.next = nn
		q.tail = nn
	}

	q.size++
}

func (q *queue) Dequeue() interface{} {
	if q.size == 0 {
		return nil
	}

	var temp *node
	if q.size == 1 {
		temp = q.head
		q.head = nil
		q.tail = nil
	} else {
		temp = q.head
		q.head = q.head.next
		temp.next = nil
	}
	q.size--
	return temp.value
}

func (q *queue) Peek() interface{} {
      if q.size == 0 {
          return nil 
      }
      return q.head.value
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment