λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

πŸ“š Algorithm/Algorithm Note

μ•Œκ³ λ¦¬μ¦˜ - Stack, Queue (μ„ ν˜• 큐, μ›ν˜• 큐, μ•Œκ³ λ¦¬μ¦˜ μ½”λ“œ)

μŠ€νƒ

'λ¨Όμ € λ“€μ–΄κ°„ 것이 λ‚˜μ€‘μ— λ‚˜μ˜€λŠ” 자료ꡬ쑰'

Last In First Out (LIFO) ꡬ쑰이닀. 

μŠ€νƒμ€ λ°°μ—΄κ³Ό μ—°κ²° 리슀트둜 λ‚˜νƒ€λ‚Ό 수 μžˆλ‹€. 

 

μŠ€νƒ

μŠ€νƒμ˜ ꡬ성 

- 상단 (top) : μŠ€νƒμ—μ„œ 제일 λ‚˜μ€‘μ— μž…λ ₯된 λ°μ΄ν„°μ˜ μœ„μΉ˜

- ν•˜λ‹¨ (bottom) : μŠ€νƒμ—μ„œ 제일 λ¨Όμ € μž…λ ₯된 λ°μ΄ν„°μ˜ μœ„μΉ˜

- μš”μ†Œ (element) : μŠ€νƒμ— μ €μž₯λ˜λŠ” 데이터 κ·Έ 자체

- 곡백 (empty stack) : μ•„λ¬΄λŸ° 데이터도 κ°–κ³  μžˆμ§€ μ•Šμ€ μŠ€νƒ

 

 

 

μŠ€νƒμ˜ μ—°μ‚°

push() : μŠ€νƒμ— 데이터λ₯Ό μΆ”κ°€ν•œλ‹€.

pop() : μŠ€νƒμ—μ„œ 데이터λ₯Ό μ‚­μ œν•œλ‹€.

is_empty(s) : μŠ€νƒμ΄ κ³΅λ°±μƒνƒœμΈμ§€ κ²€μ‚¬ν•œλ‹€.

is_full(s) : μŠ€νƒμ΄ ν¬ν™”μƒνƒœμΈμ§€ κ²€μ‚¬ν•œλ‹€.

create() : μŠ€νƒμ„ μƒμ„±ν•œλ‹€.

peek(s) : μš”μ†Œλ₯Ό μŠ€νƒμ—μ„œ μ‚­μ œν•˜μ§€ μ•Šκ³  보기만 ν•˜λŠ” 연산이닀.

 

 

 

push μ—°μ‚°

void push(int value){       //μŠ€νƒμ— 데이터 μ‚½μž…
    if(IsFull()==true)      //μŠ€νƒμ΄ 가득 μ°¨λ©΄
        printf("μŠ€νƒμ΄ 가득 μ°ΌμŠ΅λ‹ˆλ‹€.");
    else                    //빈 곡간이 있으면
        stack[++top]=value; 
}

 

pop μ—°μ‚°

int pop(){                  //데이터 λΉΌκΈ°
    if(IsEmpty()==true)    
        printf("μŠ€νƒμ΄ λΉ„μ—ˆμŠ΅λ‹ˆλ‹€.");
    else                   
        return stack[top--];    
}

 

is_empty() μ—°μ‚°

int IsEmpty(){    
    if(top<0)      
        return true;
    else   
        return false;
   }

 

is_full μ—°μ‚°

int IsFull(){       
    if(top>=MAX_STACK_SIZE-1)   
        return true;          
    else                
        return false;
}

 

 

 

큐

First In First Out (FIFO) ꡬ쑰이닀. 

 

λ°°μ—΄λ‘œ κ΅¬ν˜„ν•˜κ²Œ 되면 μ œν•œλœ κ³΅κ°„μ—μ„œ dataκ°€ ν•œ μͺ½μœΌλ‘œλ§Œ μ΄λ™ν•˜μ—¬ ν•œκ³„μ— 이λ₯΄λŠ” Drifting(ν‘œλ₯˜) ν˜„μƒ λ°œμƒν•œλ‹€. 

μ„ ν˜•ν, μ›ν˜•νκ°€ μžˆλ‹€.

 

μ„ ν˜•ν

 

is_empty()

int IsEmpty(void){
    if(front==rear)//front와 rearκ°€ κ°™μœΌλ©΄ νλŠ” λΉ„μ–΄μžˆλŠ” μƒνƒœ 
        return true;
    else return false;
}

 

 

is_full()

int IsFull(void){
    int tmp=(rear+1)%MAX; 
    if(tmp==front)
        return true;
    else
        return false;
}

 

 

add()

void addq(int value){
    if(IsFull())
        printf("Queue is Full.\n");
    else{
rear = (rear+1)%MAX;
 queue[rear]=value;
 }

 

 

delete()

int deleteq(){
    if(IsEmpty())
        printf("Queue is Empty.\n");
    else{
        front = (front+1)%MAX;
        return queue[front];
    }
}

 

 

μ›ν˜•ν

728x90