스택(Stack)

1. 스택(Stack)
LIFO 방식의 입출력 알고리즘
 * LIFO(Last In First Out) : 마지막으로 들어간 것이 제일 처음 나옴
푸시(Push) : 데이터에 순서를 적용해 차례로 저장
팝(Pop) : 가장 최신 데이터부터 차례로 가져옴
2. 스택의 구현
 * 링크드 리스트를 사용한 스택 알고리즘



댓글

  1. 스칼라 제 1장
    scala 조건문과 반복문
    조건문: if
    사용 방법
    if (조건) { 실행문}
    else if (조건) {실행문}
    else{실행문}

    예제코드
    object Ex 1_1{
    def main(agrs: Array[String]) = {
    var x = 20
    if(x > 15) println("15보다 큼")
    else if(x < 15) println("15보다 작음")
    else println("what is this?")
    }
    }
    결과
    15보다 큼

    반복문: for
    사용방법
    for (x <- 1 (to), (until) 10)
    예제코드
    object Ex 1_1{
    def main(agrs: Array[String]) = {
    for( x <- 1 to 10)
    println("x의 값은" + x)
    for (x <- 1 until 10)
    println("x의 값은" + x)
    }
    }
    결과
    x의 값은 1 x의 값은 2 x의 값은 3 x의 값은 4 x의 값은 5 x의 값은 6 x의 값은 x의 값은7 x의 값은8 x의 값은9 x의 값은 10
    x의 값은1 x의 값은2 x의 값은 3 x의 값은 4 x의 값은 5 x의 값은 6 x의 값은 7 x의 값은 8 x의 값은 9
    여기서 to 는 c언어에서 <=(이하)와 같다 그리고 until은 c언어에서의 <(미만)을 의미한다

    반복문: while 과 do while
    while 과 do while 은 자바와 크게 다른점이 없다
    사용방법 while
    while(조건) {
    //반복할 실행문
    }
    예제
    object Ex 1_1{
    def main(agrs: Array[String]) = {
    var a = 0
    while(a < 20) {
    println(a + ",")
    a = a + 1
    }
    }
    }
    결과
    0, 1, 2, 3, 4, 5, 6 ,7 ,8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
    예제 do while
    object Ex 1_1{
    def main(agrs: Array[String]) = {
    var a = 0
    do {
    println(a + ",")
    a = a + 1
    }while (a < 20)
    }
    }
    결과
    0, 1, 2, 3, 4, 5, 6 ,7 ,8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,

    반복문: 이중 for
    이중 for 문이란 for 문안에 for 문이 중첩되는 형태이다
    코드로 설명 하겠다
    전형적인 이중 for 문
    object Ex 1_1{
    def main(agrs: Array[String]) = {
    for(x <- 1 until 5){
    for(y <- 1 until 5){
    println(x*y)
    }
    }
    }
    }
    결과 1, 2, 3, 4 , 2, 4 , 6, 8 , 3, 6, 9, 12, 4, 8, 12, 16
    이러한 방식의 for 문은 번거롭고 보기에 좋지 않다
    그래서 스칼라는 다른 방식의 이중 for문을 지원한다
    보통의 이중 for 문과 달리 하나의 for 문 안에, 한번의 조건이 끝났을 때 다음 조건을 같이 넣어 주면 된다
    스칼라식 이중 for 문
    object Ex 1_1{
    def main(agrs: Array[String]) = {
    for(x <- 1 until 5; y <- 1 until 5)
    println(x*y)
    }
    }
    결과
    1, 2, 3, 4 , 2, 4 , 6, 8 , 3, 6, 9, 12, 4, 8, 12, 16
    핵심이 되는 코드는 3행이다 세미콜론 앞에 있는 조건이 먼저 도는 for 문이고 뒤에 오는 조건이 안쪽에 위치한 for 문이라고 할수 있다 앞에 코드와 성능은 동일하지만 가독성면에서 이방식이 훨씬 깔끔하다
    반복문: 조건이 있는 반복
    스칼라에서의 for 문에는 조건을 통해 반복할 대상을 제한 할 수도 있다 굳이 루프 안에서 if 문을 통해 지저분하게 감싸주지 않아도 반복해야하는 대상을 미리 골라낼 수 있다
    다음 코드를 보면 가독성을 위해 for 문 안에서 괄호를 써서(1 to 10) 과 (i %2 == 0)을 묶어 주었다
    조건이 있는 반복문
    object Ex 1_1{
    def main(agrs: Array[String]) = {
    for(x <- (1 to 10) if(i%2 == 0)){
    println(i)
    }
    }
    }
    결과
    2
    4
    6
    8
    10
    결과를 보면 i를 2로 나눈 나머지가 0인 값들, 즉 짝수만 박복의 대상이 되는 것을 알 수 있다 이중 혹은 그 이사으이 중복 for 문에서도 if 를 통해 반복될 대상을 쉽게 골라낼 수 있다
    반복문: 인덱스가 있는 for 문
    간혹 반복문 에서는 인덱스(index)가 필요할 때 가 있다 예를 들어 루프가 몇번째 돌고 잇는지 알아야 하는 경우이다 스칼라에서는 이럴 때 다음과 같은 방법을 이용할 수 있다
    for((num, index) <- List.zipWithIndex){
    println(num)
    println(index)
    }
    List 클래스는 스칼라 컬렉션의 일부이다 컬력션에 대해서는 뒤에서 다시 설명을 할 것입니다 ㄴ이 코드와 같이 List의 zipWithIndex메서드를 사용하면 배열 및 컬렛션 형식의 자료형에서 루프를 돌 때 인덱스를 사용할 수 있다

    답글삭제
  2. 다음 정리는 컴퓨터의 개념

    답글삭제

댓글 쓰기