리스트를 이용해 스택을 구현할 수 있다.
스택의 원소 : 리스트의 노드
변수 top
리스트의 마지막 노드를 가리키는 변수
초기 상태 : top = null






// AddToStart와 같다
push(i) { // 원소 i를 스택에 push
temp = createNode();
temp.data = i;
temp.link = top;
top = temp;
}
pop() { // deleteStart와 같다
temp = top
if(top == null)
return 0;
else {
item = temp.data;
top = temp.link // top이 가리키는 노드 변경
free(temp);
return item;
}
}








createLinkedQueue() {
front <- null;
rear <- null;
}
isEmpty() {
if(front == null)
return true;
else
return false;
}
enQueue(item) {
new <- getNode(); // getNode() : 새 노드 할당 후 리턴
new.data <- item;
new.link <- null;
if(front == null) {
rear <- new;
front <- new;
} else {
rear.link <- new;
rear <- new;
}
}
deQueue() {
if(isempty())
Queue_Empty();
else {
old <- front;
item <- front.data;
front <- front.link;
if(isEmpty())
rear <- NULL;
free(old);
return item;
}
}
배열을 이용한 우선순위 큐
리스트를 이용한 우선순위 큐
삽입 : enQueue
삭제 : deQueue
배열을 이용하여 우선순위 큐 구현
문제점
1~N 까지 사람이 원을 이루며 앉아있다.
양의 정수 K (<= N)이 주어지고, 순서대로 K번째 사람을 제거
N명이 모두 제거될 때 까지 반복된다.
제거되는 순서를 출력하라.
List로 푸는게 이점이 크다. 배열보다
첫 병사 값을 음수 처리 후 이동
이동 시 병사의 값을 확인 하여 카운트
음수로 변한 병사의 명수 저장
남은 병사의 명수가 2라면 남은 병사의 인덱스 값 확인
배열의 문제점
배열 내 순환 횟수 증가
인원이 많아질 수록 순환 회수가 커져 시간이 오래 걸림
불필요한 연산 발생
List를 이용하자
노드를 생성하며, 각 노드에는 병사의 위치를 데이터로 저장
첫 병사를 삭제하고, 3만큼 이동
병사를 삭제하고 3만큼 이동
남은 병사 수가 2이면 각 병사의 데이터를 확인
List 이용 - 장점
불필요한 순회의 제거
연산의 단순화
정렬할 자료를 두 부분집합 S와 U로 가정
정렬되지 않은 부분집합 U의 원소를 하나씩 거내서 이미 정렬되어있는 부분집합 S의 마지막 원소부터 비교하면서 위치를 찾아 삽입한다.
삽입 정렬을 반복하면서 부분집합 S의 원소는 하나씩 늘리고 부분집합 U의 원소는 하나씩 감소하게 한다.
부분집합 U가 공집합이 되면 삽입정렬이 완성된다.
첫 pass에서는 비교가 한번 일어남
두번째 pass에서는 비교 두번
=> 원소가 N개 일때 N-1번의 pass, 각 pass마다 비교 N-1번

U의 첫 원소 10을 S의 마지막 원소 69와 비교할 때 10 < 69 이므로 원소 10은 69의 앞자리에 위치하게 된다.
더 이상 비교할 S의 원소가 없으므로 찾은 위치에 원소 10을 삽입한다.


U의 첫 원소 2를 S의 마지막 원소 69와 비교할 때, 2 < 69 이므로, 69의 앞자리 원소 30과 비교한다.
비교를 반복하여 최종적으로 가장 앞자리에 삽입한다.

U의 첫 원소 16을 S의 마지막 원소 69와 비교할 때, 16<69이므로, 69의 앞자리 원소 30과 비교한다.
비교를 반복하여 10과 30 사이에 삽입한다.

U의 첫 원소 8을 S의 마지막 원소 69와 비교할 때, 8<69이므로, 69의 앞자리 원소 30과 비교한다.
비교를 반복하여 2와 10 사이에 삽입한다.

U의 첫 원소 31을 S의 마지막 원소 69와 비교할 때 31<69이므로, 69의 앞자리 원소 30과 비교한다.
비교를 반복하여 30과 69사이에 삽입한다.

U의 첫 번째 원소 22을 S의 마지막 원소 69와 비교할 때, 22 < 69 이므로, 69의 앞자리 원소 31과 비교한다.
비교를 반복하여 16와 30 사이에 삽입한다.

