@@ -26,19 +26,19 @@ public static void RunInteractiveTesting()
26
26
{
27
27
Console . WriteLine ( stack . Debug_View ) ;
28
28
29
- Console . WriteLine ( "\n Enter Stack command or \" done\" \n " ) ;
29
+ Console . WriteLine ( "\n Enter Stack command or \" done\" " ) ;
30
30
input = Console . ReadLine ( ) ;
31
31
string [ ] commands = input . Split ( ' ' ) ;
32
32
33
33
if ( commands [ 0 ] == "push" )
34
34
{
35
35
var item = commands [ 1 ] ;
36
36
stack . Push ( item ) ;
37
- Console . WriteLine ( $ "Enqueued : { item } \n ") ;
37
+ Console . WriteLine ( $ "\n Pushed : { item } \n ") ;
38
38
}
39
39
else if ( commands [ 0 ] == "pop" )
40
40
{
41
- Console . WriteLine ( $ "Dequeued : { stack . Pop ( ) } \n ") ;
41
+ Console . WriteLine ( $ "\n Popped : { stack . Pop ( ) } \n ") ;
42
42
}
43
43
}
44
44
}
@@ -47,43 +47,85 @@ public static void RunInteractiveTesting()
47
47
48
48
public class MyStack < T > where T : IEquatable < T >
49
49
{
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 ;
52
52
53
53
private readonly Stack < T > debug_stack ;
54
54
55
+ private bool WhenPopUseQA_WhenPushUseQB ;
55
56
56
57
public MyStack ( )
57
58
{
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 ;
60
63
61
64
debug_stack = new Stack < T > ( ) ;
62
65
}
63
66
64
67
public T Pop ( )
65
68
{
66
- if ( q1_above . Count + q2_below . Count == 0 )
69
+ if ( QA . Count + QB . Count == 0 )
67
70
throw new InvalidOperationException ( "Stack is empty." ) ;
68
71
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
+ }
71
84
72
85
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
+ //}
73
101
74
102
var itemPoppedFromActualStack = debug_stack . Pop ( ) ;
75
103
76
104
if ( item . Equals ( itemPoppedFromActualStack ) == false )
77
105
throw new Exception ( "Item popped from actual stack was" +
78
106
$ " { itemPoppedFromActualStack } , item you popped was { item } ") ;
79
107
80
- return default ;
108
+ return item ;
81
109
}
82
110
83
111
public void Push ( T item )
84
112
{
85
- // TODO: ACTUALLY IMPLEMENT PUSH
113
+ if ( WhenPopUseQA_WhenPushUseQB )
114
+ {
115
+ QB . Enqueue ( item ) ;
116
+ WhenPopUseQA_WhenPushUseQB = ! WhenPopUseQA_WhenPushUseQB ;
86
117
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
+ }
87
129
88
130
debug_stack . Push ( item ) ;
89
131
}
@@ -97,7 +139,7 @@ public string Debug_View
97
139
// the visualization: 0,0 is at upper left
98
140
99
141
// Above the baseline
100
- const int VERT_QUEUE_LAYOUT_LINES = 4 ;
142
+ const int VERT_QUEUE_LAYOUT_LINES = 5 ;
101
143
102
144
var heightOfTallestSection =
103
145
debug_stack . Count > VERT_QUEUE_LAYOUT_LINES ?
@@ -112,32 +154,32 @@ public string Debug_View
112
154
113
155
var sb_q1_above = new StringBuilder ( ) ;
114
156
115
- for ( var i = 1 ; i <= q1_above . Count ; ++ i )
157
+ for ( var i = 1 ; i <= QA . Count ; ++ i )
116
158
{
117
- var item = q1_above . Dequeue ( ) ;
159
+ var item = QA . Dequeue ( ) ;
118
160
119
161
sb_q1_above . Insert ( 0 , $ " { item } ") ;
120
162
121
- q1_above . Enqueue ( item ) ;
163
+ QA . Enqueue ( item ) ;
122
164
}
123
165
124
166
var sb_q2_below = new StringBuilder ( ) ;
125
167
126
- for ( var i = 1 ; i <= q2_below . Count ; ++ i )
168
+ for ( var i = 1 ; i <= QB . Count ; ++ i )
127
169
{
128
- var item = q2_below . Dequeue ( ) ;
170
+ var item = QB . Dequeue ( ) ;
129
171
130
172
sb_q2_below . Insert ( 0 , $ " { item } ") ;
131
173
132
- q2_below . Enqueue ( item ) ;
174
+ QB . Enqueue ( item ) ;
133
175
}
134
176
135
177
136
178
sbArr [ ^ 5 ] . Append ( sb_q1_above ) ;
137
- sbArr [ ^ 4 ] . Append ( nameof ( q1_above ) ) ;
179
+ sbArr [ ^ 4 ] . Append ( nameof ( QA ) ) ;
138
180
//sbArr[^3] is a blank line
139
181
sbArr [ ^ 2 ] . Append ( sb_q2_below ) ;
140
- sbArr [ ^ 1 ] . Append ( nameof ( q2_below ) ) ;
182
+ sbArr [ ^ 1 ] . Append ( nameof ( QB ) ) ;
141
183
142
184
143
185
const int IN_BETWEEN_PADDING = 5 ;
0 commit comments