Skip to content

Commit 6268fed

Browse files
committed
study: stack,queue,heap
# id: 문제 id를 숫자로 작성 # categories : 해당 문제의 유형을 ,로 구분하여 작성 # tags : 해당 문제의 태그를 ,로 구분하여 작성 # time : 해당 문제 풀이에 걸린 시간을 분단위 숫자로 작성 # try : 해당 문제에 몇번의 시도를 했는지 숫자로 작성 # help: 해당 문제에 외부의 도움을 받았는지 true/false로 작성 # url : 해당 문제의 url을 작성 id: categories: [] tags: [] time: try: help: false url:
1 parent 0899766 commit 6268fed

File tree

3 files changed

+200
-0
lines changed

3 files changed

+200
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
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 numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
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 numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
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+
}

0 commit comments

Comments
 (0)