스택 ( Stack push함수 , Stack pop함수 )

2017. 4. 6. 13:42C Algorithm

스택알고리즘

1. 푸시( push )

- 데이터를 순서를 적용해 차례로 저장한다.

2. 팝( pop )

- 가장 최신 데이터부터 차레로 가져온다.



typedef struct _Node{        // 구조체 선언

int Data;

struct _Node* Next;

} Node;


void InitializeStack(void){    // stack 초기화

head = (Node*)malloc(sizeof(Node));

end = (Node*)malloc(sizeof(Node));

head->Next = end ;

end->Next = end ;

}


// push함수

void push( int num ){

Node* ptr = (Node*)malloc(sizeof(Node));


ptr->data = num ;                    // 스택에 num 저장

ptr->Next = head->Next;           // ①

head->Next = ptr;                    // ②


free(ptr);

}

=> 설명

우선 head->Next == end 이고, End->Next == end 인 링크드리스트.

① ptr->Next 의 값에 head->Next 대입

    ptr->Next 는 이전에 추가된스택을 가리키고(pop에서활용된다)

    ptr은 스택의 최상위에 위치.

② head->Next = ptr     // 




// pop함수

int pop( void ){

int data = 0 ;

Node* ptr = (Node*)malloc(sizeof(Node));


ptr = head->Next;                        // 최상위 스택

head->Next = head->Next->Next;        // 최상위 스택 바로 아래스택을 가리키게된다.

data= ptr->Data;


free(ptr);

return data;

}




그림으로 나타내보자 ( 링크드 리스트 )

head - 4 - 3 - 2 - 1 - end

head->Next 는 4 를 가리키고 end->Next 는 end 를가리킨다.


ex1) push함수

head - end 에서 head->Next => end임

push(1) 실행

head->Next : 1 

1->Next : end

end->Next : end


head - 1 - end 가된다.


ex2) pop함수

head - 4 - 3 - 2 - 1 - end 에서 head->Next : 4임

pop() 실행 => ptr = head=>Next 대입되고 ptr->Data 를 반환

head->Next = head->Next->Next 의 결과로 head->Next : 3 이됨


head - 3 - 2 - 1 - end 가 된다.