2017. 4. 6. 13:42ㆍC 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 가 된다.
'C Algorithm' 카테고리의 다른 글
Queue Put / Get (0) | 2017.04.07 |
---|---|
링크드리스트 ( Linked List ) (0) | 2017.04.05 |
삽입정렬(InsertSort) & 버블정렬(BubbleSort) (0) | 2017.03.27 |
Fibonacci & Dynamic Programming( 피보나치수열 & 동적계획법) (0) | 2017.03.25 |
BinarySearch ( 이진검색 ) (0) | 2017.03.25 |