Skip to content

Commit ff234f4

Browse files
committed
Fixed logic keeping track of which queue to use next when user asks to pop or push
Tested and working.
1 parent b65a2c4 commit ff234f4

File tree

3 files changed

+67
-23
lines changed

3 files changed

+67
-23
lines changed

Assignment5/Problem2.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ public MyQueue()
9696
//popLeftNext = true;
9797

9898

99-
whenEvenPushAndPopLeft = true; ;
99+
whenEvenPushAndPopLeft = true;
100100

101101
debug_queue = new Queue<T>();
102102
}

Assignment5/Problem3.cs

+63-21
Original file line numberDiff line numberDiff line change
@@ -26,19 +26,19 @@ public static void RunInteractiveTesting()
2626
{
2727
Console.WriteLine(stack.Debug_View);
2828

29-
Console.WriteLine("\nEnter Stack command or \"done\"\n");
29+
Console.WriteLine("\nEnter Stack command or \"done\"");
3030
input = Console.ReadLine();
3131
string[] commands = input.Split(' ');
3232

3333
if (commands[0] == "push")
3434
{
3535
var item = commands[1];
3636
stack.Push(item);
37-
Console.WriteLine($"Enqueued: {item}\n");
37+
Console.WriteLine($"\nPushed: {item}\n");
3838
}
3939
else if (commands[0] == "pop")
4040
{
41-
Console.WriteLine($"Dequeued: {stack.Pop()}\n");
41+
Console.WriteLine($"\nPopped: {stack.Pop()}\n");
4242
}
4343
}
4444
}
@@ -47,43 +47,85 @@ public static void RunInteractiveTesting()
4747

4848
public class MyStack<T> where T : IEquatable<T>
4949
{
50-
private readonly Queue<T> q1_above;
51-
private readonly Queue<T> q2_below;
50+
private readonly Queue<T> QA;
51+
private readonly Queue<T> QB;
5252

5353
private readonly Stack<T> debug_stack;
5454

55+
private bool WhenPopUseQA_WhenPushUseQB;
5556

5657
public MyStack()
5758
{
58-
q1_above = new Queue<T>();
59-
q2_below = new Queue<T>();
59+
QA = new Queue<T>();
60+
QB = new Queue<T>();
61+
62+
WhenPopUseQA_WhenPushUseQB = true;
6063

6164
debug_stack = new Stack<T>();
6265
}
6366

6467
public T Pop()
6568
{
66-
if (q1_above.Count + q2_below.Count == 0)
69+
if (QA.Count + QB.Count == 0)
6770
throw new InvalidOperationException("Stack is empty.");
6871

69-
// TODO: ACTUALL IMPLEMENT POP
70-
var item = q1_above.Dequeue();
72+
T item;
73+
74+
if (WhenPopUseQA_WhenPushUseQB)
75+
{
76+
item = QA.Dequeue();
77+
WhenPopUseQA_WhenPushUseQB = !WhenPopUseQA_WhenPushUseQB;
78+
}
79+
else
80+
{
81+
item = QB.Dequeue();
82+
WhenPopUseQA_WhenPushUseQB = !WhenPopUseQA_WhenPushUseQB;
83+
}
7184

7285

86+
//// Uneven. QA leads zig zag
87+
//if (QA.Count > QB.Count)
88+
// item = QA.Dequeue();
89+
//else if (QA.Count < QB.Count)
90+
// item = QB.Dequeue();
91+
//else if (whenEvenPushAndPopAbove)
92+
//{
93+
// item = QA.Dequeue();
94+
// whenEvenPushAndPopAbove = false;
95+
//}
96+
//else
97+
//{
98+
// item = QB.Dequeue();
99+
// whenEvenPushAndPopAbove = true;
100+
//}
73101

74102
var itemPoppedFromActualStack = debug_stack.Pop();
75103

76104
if (item.Equals(itemPoppedFromActualStack) == false)
77105
throw new Exception("Item popped from actual stack was" +
78106
$" {itemPoppedFromActualStack}, item you popped was {item}");
79107

80-
return default;
108+
return item;
81109
}
82110

83111
public void Push(T item)
84112
{
85-
// TODO: ACTUALLY IMPLEMENT PUSH
113+
if (WhenPopUseQA_WhenPushUseQB)
114+
{
115+
QB.Enqueue(item);
116+
WhenPopUseQA_WhenPushUseQB = !WhenPopUseQA_WhenPushUseQB;
86117

118+
for (var i = QB.Count - 1; i > 0; --i)
119+
QB.Enqueue(QB.Dequeue());
120+
}
121+
else
122+
{
123+
QA.Enqueue(item);
124+
WhenPopUseQA_WhenPushUseQB = !WhenPopUseQA_WhenPushUseQB;
125+
126+
for (var i = QA.Count - 1; i > 0; --i)
127+
QA.Enqueue(QA.Dequeue());
128+
}
87129

88130
debug_stack.Push(item);
89131
}
@@ -97,7 +139,7 @@ public string Debug_View
97139
// the visualization: 0,0 is at upper left
98140

99141
// Above the baseline
100-
const int VERT_QUEUE_LAYOUT_LINES = 4;
142+
const int VERT_QUEUE_LAYOUT_LINES = 5;
101143

102144
var heightOfTallestSection =
103145
debug_stack.Count > VERT_QUEUE_LAYOUT_LINES ?
@@ -112,32 +154,32 @@ public string Debug_View
112154

113155
var sb_q1_above = new StringBuilder();
114156

115-
for (var i = 1; i <= q1_above.Count; ++i)
157+
for (var i = 1; i <= QA.Count; ++i)
116158
{
117-
var item = q1_above.Dequeue();
159+
var item = QA.Dequeue();
118160

119161
sb_q1_above.Insert(0, $" {item}");
120162

121-
q1_above.Enqueue(item);
163+
QA.Enqueue(item);
122164
}
123165

124166
var sb_q2_below = new StringBuilder();
125167

126-
for (var i = 1; i <= q2_below.Count; ++i)
168+
for (var i = 1; i <= QB.Count; ++i)
127169
{
128-
var item = q2_below.Dequeue();
170+
var item = QB.Dequeue();
129171

130172
sb_q2_below.Insert(0, $" {item}");
131173

132-
q2_below.Enqueue(item);
174+
QB.Enqueue(item);
133175
}
134176

135177

136178
sbArr[^5].Append(sb_q1_above);
137-
sbArr[^4].Append(nameof(q1_above));
179+
sbArr[^4].Append(nameof(QA));
138180
//sbArr[^3] is a blank line
139181
sbArr[^2].Append(sb_q2_below);
140-
sbArr[^1].Append(nameof(q2_below));
182+
sbArr[^1].Append(nameof(QB));
141183

142184

143185
const int IN_BETWEEN_PADDING = 5;

Program.cs

+3-1
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,11 @@ static void Main(string[] args)
4949
//Assignment5.Problem5.RunInteractiveTesting();
5050

5151

52-
Assignment5.Problem2.RunInteractiveTesting();
52+
//Assignment5.Problem2.RunInteractiveTesting();
5353

5454

55+
Assignment5.Problem3.RunInteractiveTesting();
56+
5557
// looks like there's no copy constructor for Array
5658
// have to allocate first then copy
5759

0 commit comments

Comments
 (0)