Skip to content

Commit c72353c

Browse files
committed
add queue using stack in go
1 parent 0ecb5e0 commit c72353c

File tree

1 file changed

+60
-0
lines changed

1 file changed

+60
-0
lines changed

Stacks/queue using stack.go

+60
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
// Queue using stack
2+
package main
3+
4+
import "fmt"
5+
6+
// Queue represents a queue data structure using two stacks.
7+
type Queue struct {
8+
enqueueStack []int // Stack for enqueue operations
9+
dequeueStack []int // Stack for dequeue operations
10+
}
11+
12+
// Enqueue adds an element to the back of the queue.
13+
func (q *Queue) Enqueue(value int) {
14+
q.enqueueStack = append(q.enqueueStack, value)
15+
}
16+
17+
// Dequeue removes and returns the front element of the queue.
18+
func (q *Queue) Dequeue() int {
19+
// If the dequeue stack is empty, transfer elements from the enqueue stack
20+
if len(q.dequeueStack) == 0 {
21+
for len(q.enqueueStack) > 0 {
22+
// Pop an element from the enqueue stack and push it onto the dequeue stack
23+
element := q.enqueueStack[len(q.enqueueStack)-1]
24+
q.enqueueStack = q.enqueueStack[:len(q.enqueueStack)-1]
25+
q.dequeueStack = append(q.dequeueStack, element)
26+
}
27+
}
28+
29+
// If the dequeue stack is still empty, the queue is empty
30+
if len(q.dequeueStack) == 0 {
31+
panic("Queue is empty")
32+
}
33+
34+
// Pop and return the front element from the dequeue stack
35+
element := q.dequeueStack[len(q.dequeueStack)-1]
36+
q.dequeueStack = q.dequeueStack[:len(q.dequeueStack)-1]
37+
return element
38+
}
39+
40+
func main() {
41+
queue := Queue{}
42+
43+
// Enqueue elements
44+
queue.Enqueue(1)
45+
queue.Enqueue(2)
46+
queue.Enqueue(3)
47+
48+
// Dequeue elements
49+
fmt.Println(queue.Dequeue()) // Output: 1
50+
fmt.Println(queue.Dequeue()) // Output: 2
51+
52+
// Enqueue more elements
53+
queue.Enqueue(4)
54+
queue.Enqueue(5)
55+
56+
// Dequeue the remaining elements
57+
fmt.Println(queue.Dequeue()) // Output: 3
58+
fmt.Println(queue.Dequeue()) // Output: 4
59+
fmt.Println(queue.Dequeue()) // Output: 5
60+
}

0 commit comments

Comments
 (0)