Last active
December 30, 2016 06:03
-
-
Save hygull/1a1bb80ca223549ff3267d8f0975ed03 to your computer and use it in GitHub Desktop.
To perform enqueue & dequeue operations on queue(a practice on Hackerearth) created by hygull - https://repl.it/EyX3/1
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Creation date : 30/12/2016. | |
Problem's link : https://www.hackerearth.com/practice/data-structures/queues/basics-of-queues/tutorial/ | |
Aim of program : To perform enqueue & dequeue operations oDn queue. | |
Coded by : Rishikesh Agrawani. | |
*/ | |
package main | |
import "fmt" | |
//Defining a node for Queue | |
type QueueNode struct { | |
x int8 | |
next *QueueNode | |
} | |
var totalItemsInQueue int8 | |
func Enqueue(rear *QueueNode, item int8) *QueueNode { | |
newNode := new(QueueNode) | |
newNode.x = item | |
if rear == nil { | |
rear = newNode | |
} else { | |
rear.next = newNode | |
rear = rear.next | |
} | |
totalItemsInQueue += 1 | |
return rear | |
} | |
func Dequeue(front *QueueNode) (*QueueNode, *QueueNode) { | |
var dequeuedNode *QueueNode | |
if front != nil { | |
dequeuedNode = front | |
front = front.next | |
dequeuedNode.next = nil | |
totalItemsInQueue -= 1 | |
} | |
return front, dequeuedNode | |
} | |
func main() { | |
var n, item int8 | |
var queueOperationType string //E or D => E for Enqueue & D for Dequeue | |
var rear, front, dequeuedNode *QueueNode | |
fmt.Scanf("%d", &n) //storing a value into n | |
hash := make(map[int8][]int8) | |
var i int8 | |
for i = 0; i < n; i++ { | |
fmt.Scanf("%s", &queueOperationType) | |
if queueOperationType == "E" { //E => Enqueue | |
fmt.Scanf("%d", &item) | |
rear = Enqueue(rear, item) | |
if front == nil { | |
front = rear | |
} | |
hash[int8(i)] = []int8{totalItemsInQueue} | |
} else { //D => Dequeue | |
front, dequeuedNode = Dequeue(front) | |
arr := []int8{} | |
if front == nil { | |
rear = front | |
} | |
if dequeuedNode == nil { | |
arr = append(arr, -1, totalItemsInQueue) | |
} else { | |
arr = append(arr, dequeuedNode.x, totalItemsInQueue) | |
} | |
hash[int8(i)] = arr | |
} | |
} | |
//Displaying the result | |
for i = 0; i < n; i++ { | |
for index, num := range hash[int8(i)] { | |
if index == 0 { | |
fmt.Printf("%d", num) | |
} else { | |
fmt.Printf(" %d", num) | |
} | |
} | |
fmt.Println() | |
} | |
} | |
/*INPUT:- | |
10 | |
D | |
D | |
E 51 | |
E 64 | |
E 67 | |
D | |
E 68 | |
E 69 | |
D | |
E 70 | |
*/ | |
/*OUTPUT:- | |
-1 0 | |
-1 0 | |
1 | |
2 | |
3 | |
51 2 | |
3 | |
4 | |
64 3 | |
4 | |
*/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment