File tree 3 files changed +200
-0
lines changed
src/basicConcept/dataStructure
3 files changed +200
-0
lines changed Original file line number Diff line number Diff line change
1
+ import kotlin.math.*
2
+
3
+ class Heap (){
4
+ val arr= mutableListOf<Int >()
5
+
6
+ fun push (e : Int ){
7
+ arr.add(e)
8
+ var cIndex= arr.size
9
+ if (arr.size> 1 ){
10
+ while (cIndex!= 1 ){
11
+ val parent= cIndex/ 2
12
+ if (arr[parent- 1 ]< arr[cIndex- 1 ]){
13
+ val temp= arr[parent- 1 ]
14
+ arr[parent- 1 ]= e
15
+ arr[cIndex- 1 ]= temp
16
+ cIndex= parent
17
+ }else break
18
+ }
19
+ }
20
+ }
21
+
22
+ fun pop ():Int? {
23
+ if (arr.isEmpty()) return null
24
+ val res= arr[0 ]
25
+ val leaf= arr.removeLast()
26
+ if (arr.isEmpty()) return res
27
+ arr[0 ]= leaf
28
+ var idx= 1
29
+ while (arr.isNotEmpty() && idx< arr.size){
30
+ val c1= 2.0 .pow(idx).toInt()
31
+ val c2= c1+ 1
32
+ if (c1- 1 < arr.size && arr[idx- 1 ]< arr[c1- 1 ] && arr[c1- 1 ]> arr[c2- 1 ]){
33
+ val temp= arr[c1- 1 ]
34
+ arr[c1- 1 ]= arr[idx- 1 ]
35
+ arr[idx- 1 ]= temp
36
+ idx= c1
37
+ }else if (c2- 1 < arr.size && arr[idx- 1 ]< arr[c2- 1 ] && arr[c2- 1 ]> arr[c1- 1 ]){
38
+ val temp= arr[c2- 1 ]
39
+ arr[c2- 1 ]= arr[idx- 1 ]
40
+ arr[idx- 1 ]= temp
41
+ idx= c2
42
+ }else break
43
+ }
44
+ return res
45
+ }
46
+ }
47
+
48
+ fun main (){
49
+
50
+ val h= Heap ()
51
+ h.push(2 )
52
+ h.push(1 )
53
+ h.push(3 )
54
+ h.push(1 )
55
+ println (h.arr)
56
+ println (h.pop())
57
+ }
Original file line number Diff line number Diff line change
1
+ import java.util.*
2
+
3
+ class ArrayQueue (val size : Int ){
4
+ val arr= IntArray (size)
5
+ var front= 0
6
+ var rear= 0
7
+ var qSize= 0
8
+ fun enqueue (e : Int ){
9
+ if (qSize== size){
10
+ println (" queue is full" )
11
+ return
12
+ }
13
+ arr[rear]= e
14
+ qSize++
15
+ rear= (rear+ 1 )% size
16
+ }
17
+
18
+ fun dequeue ():Int? {
19
+ if (qSize== 0 ) return null
20
+ val e= arr[front]
21
+ qSize--
22
+ front= (front+ 1 )% size
23
+ return e
24
+
25
+ }
26
+ }
27
+
28
+ class LinkedListQueue (){
29
+ val arr= LinkedList <Int >()
30
+
31
+ fun enqueue (e : Int ){
32
+ arr.add(e)
33
+ }
34
+
35
+ fun dequeue ():Int? {
36
+ if (arr.isEmpty())return null
37
+ return arr.removeLast()
38
+ }
39
+ }
40
+
41
+ fun main () {
42
+ val q= LinkedListQueue ()
43
+ q.enqueue(0 )
44
+ q.enqueue(1 )
45
+ q.enqueue(2 )
46
+ println (q.dequeue())
47
+ println (q.dequeue())
48
+ println (q.dequeue())
49
+ println (q.dequeue())
50
+ }
Original file line number Diff line number Diff line change
1
+ import java.util.*
2
+
3
+ class ArrayStack (size : Int ){
4
+ val arr= IntArray (size)
5
+ var top= - 1
6
+
7
+ fun push (e : Int ){
8
+ if (top== arr.size- 1 ){
9
+ println (" stack is full" )
10
+ return
11
+ }
12
+
13
+ top++
14
+ arr[top]= e
15
+ }
16
+
17
+ fun pop ():Int? {
18
+ if (top== - 1 ){
19
+ println (" stack is empty" )
20
+ return null
21
+ }
22
+ val e= arr[top]
23
+ top--
24
+ return e
25
+ }
26
+ }
27
+
28
+ class DynamicArrayStack (){
29
+
30
+ var size= 2
31
+ var arr= IntArray (size)
32
+ var top= - 1
33
+
34
+ fun push (e : Int ){
35
+ if (top== arr.size- 1 ){
36
+ swapBigger()
37
+ }
38
+
39
+ top++
40
+ arr[top]= e
41
+ }
42
+
43
+ fun swapBigger (){
44
+ val newArr= IntArray (size* 2 )
45
+ size* = 2
46
+ for (i in arr.indices){
47
+ newArr[i]= arr[i]
48
+ }
49
+
50
+ arr= newArr
51
+ }
52
+
53
+
54
+
55
+ fun pop ():Int? {
56
+ if (top== - 1 ){
57
+ println (" stack is empty" )
58
+ return null
59
+ }
60
+ val e= arr[top]
61
+ top--
62
+ return e
63
+ }
64
+
65
+ }
66
+
67
+ class LinkedListStack (){
68
+
69
+ val arr= LinkedList <Int >()
70
+
71
+ fun push (e : Int ){
72
+ arr.add(e)
73
+ }
74
+
75
+ fun pop ():Int? {
76
+ if (arr.isEmpty()) return null
77
+ return arr.removeLast()
78
+ }
79
+
80
+ }
81
+
82
+ fun main () {
83
+ val stack= DynamicArrayStack ()
84
+
85
+ stack.push(1 )
86
+ stack.push(2 )
87
+ stack.push(3 )
88
+ println (stack.pop())
89
+ println (stack.pop())
90
+ println (stack.pop())
91
+ println (stack.pop())
92
+
93
+ }
You can’t perform that action at this time.
0 commit comments