3. 데큐 구조체
글 작성자: HEROHJK
            
            사실 스택 계산기에 데큐는 크게 필요 없습니다.
다만 개인적으로 배열의 Insert[0] 이게 귀찮기도 하고, 처음에 생각을 잘못해서 일단 구현을하고 조금씩 쓰면서 만들어 두었습니다.
실제로 제가 구현하려는 계산기에 데큐 -> 배열로 100% 치환이 됩니다.(데큐, 배열의 자료구조를 아시는분들은 당연히 아시겠지만, 데큐 -> 배열로 치환은 다 됩니다)
일단 코드는 스택과 크게 차이가 없습니다.
Pop할때 앞부분을 뺄지, 뒷부분을 뺄지만 정하게 되어있으며, 앞부분은 큐와 같고 뒷부분은 스택과 같습니다.
삽입은 오직 뒤에서만 이루어집니다.
그리고 추가로, 배열 <-> 데큐를 치환하는 연산을 추가했습니다.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 | // //  Dequeue.swift //  SwiftCalculator // //  Created by HEROHJK on 2017. 11. 25.. //  Copyright © 2017년 herohjk. All rights reserved. // import Swift public enum DequeuePosition{     case first     case last } public struct Dequeue<T>{     private var dequeue = [T]()     //배열로 이루어져 있다.     private var length: Int = 0     //길이     //선언과 동시에 데큐 초기화     public init (){         dequeue.removeAll(keepingCapacity: false)         length=0     }     //값 삽입(값은 항상 맨 뒤로 들어가며, 길이가 반환된다)     @discardableResult public mutating func Insert(_ object: T) -> Int{         //마지막에 값을 삽입한다         dequeue.append(object)         //데큐의 길이를 늘린다         length=length+1         return dequeue.count     }     //값 추출(데큐 위치에 따라 다른 값이 반환된다)     public mutating func Get(_ position: DequeuePosition) -> T{         //앞부분일경우         if position == DequeuePosition.first{             //맨 앞 값을 불러온다             let object=dequeue[0]             //처음 값을 삭제한다             dequeue.remove(at: 0)             //길이를 줄인다             length=length-1             return object         }             //뒷부분일경우         else{             //맨 뒷 값을 불러온다             let object=dequeue[length-1]             //맨 뒷 값을 삭제한다             dequeue.remove(at: length-1)             //길이를 줄인다             length=length-1             return object         }     }     //데큐 값 확인     public func View(_ position: DequeuePosition) -> T{         //앞부분일 경우         if position == .first{             return dequeue[0]         }         //뒷부분일 경우         else{             return dequeue[length-1]         }     }     //데큐 초기화     public mutating func Clear()->Int{         //데큐를 비운다         dequeue.removeAll(keepingCapacity: false)         //길이를 0으로 초기화한다         length=0         //길이 값 반환         return length     }     //데큐가 비어있는지 확인     public var IsEmpty: Bool{         //0보다 많으면 거짓을 반환         if(length>0){             return false         }         //아니면 참을 반환         return true     }     //데큐 길이 확인     public var GetLength: Int{         return length     }     //데큐 -> 배열로 변경     public func DequeueToArray() -> Array<T>{         var array: Array<T>         array=dequeue         return array     }     //배열 -> 데큐로 변경     public mutating func ArrayToDequeue(_ array: Array<T>) -> Int{         dequeue=array         length=array.count         return length     } } | cs | 
반응형
    
    
    
  댓글
이 글 공유하기
다른 글
- 
5. 중위식 문자열 -> 전용 데이터 배열로 변환(파싱)5. 중위식 문자열 -> 전용 데이터 배열로 변환(파싱)2017.11.26
- 
4. 계산기 함수에 이용하는 열거형과 데이터4. 계산기 함수에 이용하는 열거형과 데이터2017.11.26
- 
2. 스택 구조체2. 스택 구조체2017.11.23
- 
2. 스택 클래스2. 스택 클래스2017.11.22