주의 사항! 이 글은 제가 직접 공부하는 중에 작성되고 있습니다. 따라서 제가 이해하는 그대로의 내용이 포함됩니다. 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다. 큐는 스택과 상당히 유사합니다. 유일한 차이점은 먼저 저장한 데이터가 먼저 사용된다는 것입니다. 그래서 배열 기반 큐는 배열 기반 스택을 구현했던 것을 조금 수정하면 구현할 수 있을 것만 같습니다. 하지만 생각보다는 그렇게 간단히 끝나지 않습니다. 다음의 배열을 생각해 보겠습니다. 1 2 3 4 위 배열에는 1, 2, 3, 4의 순서대로 데이터가 입력되었습니다. 여기에서 데이터를 하나 빼보겠습니다. 이 배열이 큐인 경우 먼저 저장된 데이터를 먼저 빼야 하기 때문에 다음과 같이 1이 빠져나옵니다. 2 3 4 여기서부터가 문제입니다. ..
주의 사항! 이 글은 제가 직접 공부하는 중에 작성되고 있습니다. 따라서 제가 이해하는 그대로의 내용이 포함됩니다. 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다. 큐는 앞서 설명한 스택과 함께 언급되고 또 비교되는 자료구조입니다. 스택은 먼저 들어간 데이터가 나중에 나오는 구조인 반면, 큐는 먼저 들어간 데이터가 먼저 나오는 구조입니다. 이것이 스택과 큐의 유일한 차이점입니다. 스택과 마찬가지로 큐의 ADT도 정형화된 편입니다. 큐의 핵심이라고 할 수 있는 두 가지 연산을 소개하겠습니다. enqueue 큐에 데이터를 넣는 연산 dequeue 큐에서 데이터를 꺼내는 연산 스택에서 데이터를 넣고 빼는 연산을 가리켜 각각 push, pop이라고 하는 것처럼, 큐에서 데이터를 넣고 빼는 연산에 대해..
주의 사항! 이 글은 제가 직접 공부하는 중에 작성되고 있습니다. 따라서 제가 이해하는 그대로의 내용이 포함됩니다. 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다. 다음과 같은 후위 표기법의 수식을 계산할 알고리즘을 어떻게 구현할 것인지 고민해 봅니다. 3 2 4 * + 저는 후위 표기법의 계산 방법이 꽤 복잡할 것으로 생각했습니다. 하지만 그렇지 않았습니다. 후위 표기법의 수식을 계산하는 알고리즘은 스택을 이용하면 정말 간단하게 구현할 수 있습니다. 그 알고리즘은 다음과 같습니다. 후위 표기법의 수식에서 데이터를 하나씩 읽어 들인다. 읽어 들인 데이터가 피연산자라면 이를 스택에 저장한다. 읽어 들인 데이터가 연산자라면 스택에서 두 개의 피연산자를 꺼내어 이를 계산한 후, 결과를 스택에 저장한..
연습장과 연필을 이용해서 다음 후위 표기법의 수식을 계산하여 그 값이 얼마인지 확인해 봅니다. 4 2 * 8 + 1 2 3 + * 4 / 단, 나눗셈은 정수형 나눗셈을 진행하기로 합니다. 즉, 나눗셈을 하면 소수점 이하는 내림으로 처리합니다. 제가 작성한 답안은 아래의 '더보기'를 클릭하여 확인할 수 있습니다. 혹시 이해되지 않는 부분이 있거나, 추가 설명이 필요하다면 언제든지 물어보길 바랍니다. 더보기 연산의 과정은 생략하고 결과만 보이도록 하겠습니다. 1 1
주의 사항! 이 글은 제가 직접 공부하는 중에 작성되고 있습니다. 따라서 제가 이해하는 그대로의 내용이 포함됩니다. 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다. 지금부터는 후위 표기법으로의 변환 알고리즘을 코드로 구현합니다. 먼저 실제 후위 표기법으로의 변환을 처리하는 함수를 다음의 형태로 정의하기로 합니다. void ConvToRPNExp(char exp[]) { .... } 위 함수의 의도는 다음과 같습니다. "중위 표기법의 수식을 담고 있는 배열의 주소 값을 인자로 전달하면서 ConvToRPNExp 함수를 호출하면, 인자로 전달된 주소 값의 배열에는 후위 표기법으로 바뀐 수식이 저장된다." (그런데 제가 잘 몰라서 그럴 수도 있지만 배열의 주소 값을 포인터로 받는 것도 아닌데 어떻게 ..
소괄호를 포함하는 중위 표기법의 수식을 후위 표기법의 수식으로 변환하는 과정을 정리하기 위해서 다음 수식 하나를 연습장과 연필을 이용해서 후위 표기법의 수식으로 바꿔봅니다. ( 1 * 2 + 3 ) / 4 제가 작성한 답안은 다음의 '더보기'를 클릭하여 확인할 수 있습니다. 혹시 이해가 가지 않거나 추가 설명이 필요하다면 언제든지 물어보길 바랍니다. 더보기 알고리즘은 앞서 설명했으므로 변환의 과정은 보이지 않고, 변환의 결과만 보이도록 하겠습니다. 저는 후위 표기법으로의 변환뿐만 아니라 전위 표기법으로의 변환도 수행하였습니다. 후위 표기법 : 1 2 * 3 + 4 / 전위 표기법 : / + * 1 2 3 4