타이라 님이 쓰신 글 :
: 안녕하세요. 자료구조 전공을 배우는다가 이렇게 질문 올립니다.
:
: 연결스택에서 포인터의 방향은 스택의 top에서 바닥 쪽으로 향한다. 만약 반대 방향으로 포인터를 설정하면 어떤 문제가 발생하죠?
=> Stack 의 동작은 Push 와 Pop 2가지로 이루어지는건 아시죠?
LIFO 로 동작하는건 당연하구요..
포인터의 방향이 Top 쪽에서 Bottom 쪽이라는 것으로 봐서 Singly Linked List 로 구현된걸로 추정가능하겠군요.
(참고로 Top->Bottom, Bottom->Top 양쪽다 향하게 할 경우 Doubly Linked List 로 구현해야겠죠?)
보통 Head Node 와 Tail Node 에 대한 포인터를 Global 변수로 할당해 놓겠지요? (뭐 함수로만 해당 변수를 Access 하게 할 수도 있겠지만..그거야 개발자의 입맛이고..)
포인터의 방향이 Top 에서 Bottom 으로 가리킨다는 걸로 봐서 우선 다음과 같이 가정하죠.
Node 1 <- Node 2 <- ...<- Node N
^ ^
Head Node(Bottom) Tail Node(Top)
Pop 방향 Push 방향
Data 를 Push 하는 경우
Node 1 <- Node 2 <- ...<- Node N <- Node N + 1
^ ^
Head Node(Bottom) Tail Node(Top)
이 되겠죠..
Data 를 Pop 하는 경우
Node 1 <- Node 2 <- ...<- Node N
^ ^
Head Node(Bottom) Tail Node(Top)가 되구요..
1) 모든 화살표 위치를 반대로 변경시킨다면?
Push 와 Pop 동작이 바뀌게 되겠죠?
그렇다면 기존에 가정해 놓았던 Head Node 와 Tail Node 도 바뀌어야 할겁니다.
2) 단지 특정 한 노드의 화살표만 위치를 바꾸어 놓는다면?
Push 와 Pop 에 대한 정의가 코드 중간에 흔들려 버린다면 해당 Stack 의 동작은 기약할 수 없게 됩니다.
Push 를 했는데 Pop 이 되고 Pop 을 했는데 Push 가 될 수도 있어서 동작을 보장할 수 없습니다.
뭐 그러기전에 포인터 에러가 나겠지만서두요..
:
: 원형 큐에서 공백과 포화상태를 구분하기 위하여 사용 가능한 공간 중에서 1개를 사용하지 않는 방법을 사용한다. 큐에서 front 와 rear가 같으면 빈상태인데 원형큐의 경우 front와 rear가 같게되면 빈공간일 경우와 포화상태일경우가 생기기 때문에 구분하기위해 포화상태일 경우는 front가 rear보다 한칸 앞에 있을때로 만들자나요. 공간을 전부사용하면서 큐의 공백과 포화상태를 구분할 수 있는 방법을 설계해 보라는 문제..
=> 답을 말해 놓으셨네요.. front가 rear보다 한칸 앞에 있을때 공간을 전부 사용하겠지요..
:
: 이거를 알아오라네요.. 다른문제는 풀엇는데 이 두문제가 어렵네요.. 가르쳐주시면 감사하겠습니다.
=> 제가 생각하기로 공부를 안하셨네요.
공부 안하고 답을 달라고 하는건 게으름뱅이나 하는 짓입니다.
책을 약간이라도 읽어 보셨고 인터넷을 좀 뒤지셨다면 이런 질문은 올리지 않습니다.
|