File tree Expand file tree Collapse file tree 5 files changed +212
-0
lines changed Expand file tree Collapse file tree 5 files changed +212
-0
lines changed Original file line number Diff line number Diff line change 94
94
<Compile Include =" DataStructures\LinkedList\SinglyLinkedList.cs" />
95
95
<Compile Include =" DataStructures\List\ArrayList.cs" />
96
96
<Compile Include =" DataStructures\List\SkipList.cs" />
97
+ <Compile Include =" DataStructures\Queues\ArrayQueue.cs" />
98
+ <Compile Include =" DataStructures\Queues\LinkedListQueue.cs" />
99
+ <Compile Include =" DataStructures\Queues\PriorityQueue.cs" />
100
+ <Compile Include =" DataStructures\Queues\Queue.cs" />
97
101
<Compile Include =" DataStructures\Set\BloomFilter.cs" />
98
102
<Compile Include =" DataStructures\Set\DisJointSet.cs" />
99
103
<Compile Include =" DataStructures\Set\SparseSet.cs" />
Original file line number Diff line number Diff line change
1
+ using System . Collections ;
2
+ using System . Collections . Generic ;
3
+
4
+ namespace Advanced . Algorithms . DataStructures . Foundation
5
+ {
6
+ internal class ArrayQueue < T > : IQueue < T >
7
+ {
8
+ private readonly List < T > list = new List < T > ( ) ;
9
+
10
+ public int Count { get ; private set ; }
11
+
12
+ public void Enqueue ( T item )
13
+ {
14
+ list . Insert ( 0 , item ) ;
15
+ Count ++ ;
16
+ }
17
+
18
+ public T Dequeue ( )
19
+ {
20
+ if ( list . Count == 0 )
21
+ {
22
+ throw new System . Exception ( "Empty Queue" ) ;
23
+ }
24
+
25
+ var result = list [ list . Count - 1 ] ;
26
+ list . RemoveAt ( list . Count - 1 ) ;
27
+ Count -- ;
28
+ return result ;
29
+ }
30
+
31
+ public IEnumerator < T > GetEnumerator ( )
32
+ {
33
+ return GetEnumerator ( ) ;
34
+ }
35
+
36
+ IEnumerator IEnumerable . GetEnumerator ( )
37
+ {
38
+ return list . GetEnumerator ( ) ;
39
+ }
40
+ }
41
+
42
+ }
Original file line number Diff line number Diff line change
1
+ using System . Collections ;
2
+ using System . Collections . Generic ;
3
+
4
+ namespace Advanced . Algorithms . DataStructures . Foundation
5
+ {
6
+ internal class LinkedListQueue < T > : IQueue < T >
7
+ {
8
+ private readonly DoublyLinkedList < T > list = new DoublyLinkedList < T > ( ) ;
9
+
10
+ public int Count { get ; private set ; }
11
+
12
+ public void Enqueue ( T item )
13
+ {
14
+ list . InsertFirst ( item ) ;
15
+ Count ++ ;
16
+ }
17
+
18
+ public T Dequeue ( )
19
+ {
20
+ if ( list . Head == null )
21
+ {
22
+ throw new System . Exception ( "Empty Queue" ) ;
23
+ }
24
+
25
+ var result = list . DeleteLast ( ) ;
26
+ Count -- ;
27
+ return result ;
28
+ }
29
+
30
+ public IEnumerator < T > GetEnumerator ( )
31
+ {
32
+ return GetEnumerator ( ) ;
33
+ }
34
+
35
+ IEnumerator IEnumerable . GetEnumerator ( )
36
+ {
37
+ return list . GetEnumerator ( ) ;
38
+ }
39
+ }
40
+ }
Original file line number Diff line number Diff line change
1
+ using System ;
2
+ using System . Collections ;
3
+ using System . Collections . Generic ;
4
+
5
+ namespace Advanced . Algorithms . DataStructures
6
+ {
7
+ /// <summary>
8
+ /// A priority queue implementation using heap
9
+ /// </summary>
10
+ public class PriorityQueue < T > : IEnumerable < T > where T : IComparable
11
+ {
12
+ private readonly BHeap < T > heap ;
13
+ public PriorityQueue ( bool isMax = false )
14
+ {
15
+ heap = new BHeap < T > ( isMax ) ;
16
+ }
17
+
18
+ /// <summary>
19
+ /// Time complexity:O(log(n)).
20
+ /// </summary>
21
+ public void Enqueue ( T item )
22
+ {
23
+ heap . Insert ( item ) ;
24
+ }
25
+
26
+ /// <summary>
27
+ /// Time complexity:O(log(n)).
28
+ /// </summary>
29
+ public T Dequeue ( )
30
+ {
31
+ return heap . Extract ( ) ;
32
+ }
33
+
34
+ /// <summary>
35
+ /// Time complexity:O(1).
36
+ /// </summary>
37
+ public T Peek ( )
38
+ {
39
+ return heap . Peek ( ) ;
40
+ }
41
+
42
+ public IEnumerator < T > GetEnumerator ( )
43
+ {
44
+ return GetEnumerator ( ) ;
45
+ }
46
+
47
+ IEnumerator IEnumerable . GetEnumerator ( )
48
+ {
49
+ return heap . GetEnumerator ( ) ;
50
+ }
51
+ }
52
+ }
Original file line number Diff line number Diff line change
1
+ using System . Collections ;
2
+ using System . Collections . Generic ;
3
+
4
+ namespace Advanced . Algorithms . DataStructures . Foundation
5
+ {
6
+ /// <summary>
7
+ /// A queue implementation.
8
+ /// </summary>
9
+ public class Queue < T > : IEnumerable < T >
10
+ {
11
+ private readonly IQueue < T > queue ;
12
+
13
+ /// <summary>
14
+ /// The number of items in the queue.
15
+ /// </summary>
16
+ public int Count => queue . Count ;
17
+
18
+ /// <param name="type">The queue implementation type.</param>
19
+ public Queue ( QueueType type = QueueType . Array )
20
+ {
21
+ if ( type == QueueType . Array )
22
+ {
23
+ queue = new ArrayQueue < T > ( ) ;
24
+ }
25
+ else
26
+ {
27
+ queue = new LinkedListQueue < T > ( ) ;
28
+ }
29
+ }
30
+
31
+ /// <summary>
32
+ /// Time complexity:O(1).
33
+ /// </summary>
34
+ public void Enqueue ( T item )
35
+ {
36
+ queue . Enqueue ( item ) ;
37
+ }
38
+
39
+ /// <summary>
40
+ /// Time complexity:O(1).
41
+ /// </summary>
42
+ public T Dequeue ( )
43
+ {
44
+ return queue . Dequeue ( ) ;
45
+ }
46
+
47
+ public IEnumerator < T > GetEnumerator ( )
48
+ {
49
+ return GetEnumerator ( ) ;
50
+ }
51
+
52
+ IEnumerator IEnumerable . GetEnumerator ( )
53
+ {
54
+ return queue . GetEnumerator ( ) ;
55
+ }
56
+ }
57
+
58
+ internal interface IQueue < T > : IEnumerable < T >
59
+ {
60
+ int Count { get ; }
61
+ void Enqueue ( T item ) ;
62
+ T Dequeue ( ) ;
63
+ }
64
+
65
+ /// <summary>
66
+ /// The queue implementation types.
67
+ /// </summary>
68
+ public enum QueueType
69
+ {
70
+ Array = 0 ,
71
+ LinkedList = 1
72
+ }
73
+
74
+ }
You can’t perform that action at this time.
0 commit comments