11import 'Queue.dart' ;
2+
3+ /**
4+ * 带尾结点的队列
5+ */
26class LinkedListQueue implements Queue {
7+
8+ late _Node ? _head;
9+ late _Node ? _tail;
10+ late int _size;
11+
12+ LinkedListQueue (){
13+ _head = null ;
14+ _tail = null ;
15+ _size = 0 ;
16+ }
17+
318 @override
419 dequeue () {
5- // TODO: implement dequeue
6- throw UnimplementedError ();
20+ if (isEmpty ()) {
21+ throw Exception ("Cannot dequeue from an empty queue" );
22+ }
23+ _Node retNode = _head! ;
24+ _head = _head! .next;
25+ retNode.next = null ;
26+ if (_head == null ){
27+ _tail = null ;
28+ }
29+ _size -- ;
30+ return retNode.t;
731 }
832
933 @override
1034 void enqueue (e) {
11- // TODO: implement enqueue
35+ if (_tail == null ){
36+ _tail = _Node .wihtHead (e);
37+ _head = _tail;
38+ }else {
39+ _tail! .next = _Node .wihtHead (e);
40+ _tail = _tail! .next;
41+ }
42+ _size++ ;
1243 }
1344
1445 @override
1546 getFront () {
16- // TODO: implement getFront
17- throw UnimplementedError ();
47+ if (isEmpty ()) {
48+ throw Exception ("Queue is empty" );
49+ }
50+ return _head! .t;
1851 }
1952
2053 @override
2154 int getSize () {
22- // TODO: implement getSize
23- throw UnimplementedError ();
55+ return _size;
2456 }
2557
2658 @override
2759 bool isEmpty () {
28- // TODO: implement isEmpty
29- throw UnimplementedError ();
60+ return _size == 0 ;
61+ }
62+
63+ @override
64+ String toString () {
65+ StringBuffer res = new StringBuffer ();
66+ res.write ("Queue: front " );
67+ for (_Node ? cur = _head! .next ; cur != null ; cur = cur.next){
68+ res.write (cur);
69+ res.write ("->" );
70+ }
71+ res.write ("NULL tail" );
72+ return res.toString ();
3073 }
3174
3275}
@@ -37,17 +80,29 @@ class _Node<T> {
3780
3881 T ? t;
3982
40- _Node . empty ();
83+ _Node ();
4184
42- _Node .all (this .t, this .next);
85+ _Node .withAll (this .t, this .next);
4386
44- factory _Node .head (T t) {
45- var result = new _Node .all (t, null );
87+ factory _Node .wihtHead (T t) {
88+ var result = new _Node .withAll (t, null );
4689 return result;
4790 }
4891
4992 @override
5093 String toString () {
5194 return t.toString ();
5295 }
96+ }
97+
98+ void main (){
99+ LinkedListQueue queue = new LinkedListQueue ();
100+ for (int i = 0 ; i < 10 ; i ++ ){
101+ queue.enqueue (i);
102+ print (queue);
103+ if (i % 3 == 2 ){
104+ queue.dequeue ();
105+ print (queue);
106+ }
107+ }
53108}
0 commit comments