주의 사항! 이 글은 제가 직접 공부하는 중에 작성되고 있습니다. 따라서 제가 이해하는 그대로의 내용이 포함됩니다. 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다. 이제는 다음과 같이 소괄호가 포함되어 있는 중위 표기법의 수식을 후위 표기법의 수식으로 바꾸는 방법에 대해서 생각해 보겠습니다. 4 - ( 1 + 2 * 3 ) / 5 후위 표기법의 수식에서는 먼저 연산이 이뤄져야 하는 연산자가 뒤에 연산이 이뤄지는 연산자보다 앞에 위치해야 합니다. 따라서 위의 수식에서는 '+'연산자와 '*'연산자가 '/'연산자보다 먼저 스택을 빠져나와서 배치되어야 합니다. 이를 위해서 괄호를 어떻게 처리하는지 변환의 과정을 설명하겠습니다. 중위 표기법을 후위 표기법으로 변환하는 과정입니다. 기존 수식 ( 1 + ..
잠시 후에는 중위 표기법의 수식을 후위 표기법의 수식으로 바꾸는 프로그램을 작성할 것입니다. 그런데 그에 앞서 이번에 설명하는 방법으로 몇 개의 수식을 후위 표기법으로 바꾸는 연습을 하고자 합니다. 종이와 연필을 이용해서 후위 표기법으로 바꿔보면서 변환의 과정을 정확히 파악하기 바랍니다. 3 + 2 * 4 2 * 4 + 3 2 * 1 + 3 / 2 제 답안은 아래의 '더보기'를 클릭하여 확인할 수 있습니다. 혹시 이해가 가지 않거나 추가 설명이 필요하다면 언제든지 물어보길 바랍니다. 더보기 과정이 어떻게 되는지는 설명하지 않겠습니다. 변환의 결과만 보이겠습니다. 여기에 추가로 전위 표기법으로의 변환 결과도 보이도록 하겠습니다. 3 + 2 * 4 후위 표기법 : 3 2 4 * + 전위 표기법 : + 3 *..
주의 사항! 이 글은 제가 직접 공부하는 중에 작성되고 있습니다. 따라서 제가 이해하는 그대로의 내용이 포함됩니다. 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다. 이제는 지금까지 공부한, 그리고 구현한 스택을 활용할 차례입니다. 자료구조에서 스택의 활용과 관련해서 빠지지 않고 등장하는 사례가 계산기 프로그램입니다. 우리가 구현할 계산기 프로그램은 아래에서 보이는 수준의 수식을 계산할 수 있어야 합니다. ( 3 + 4 ) * ( 5 / 2 ) + ( 7 + ( 9 - 5 ) ) 프로그램 사용자가 위 수준의 문장을 입력하면 프로그램은 연산자의 우선순위와 괄호의 위치를 인식하여 연산의 결과를 프로그램 사용자에게 보여야 합니다. 즉, 우리가 구현할 계산기는 다음 두 가지를 고려해서 연산을 진행할 수..
이번에는 앞서 구현했던 원형 연결 리스트를 바탕으로 스택을 구현해 봅니다. 아래에 제시되는 CLinkedList.h 파일과 CLinkedList.c 파일을 변경하지 않고 그저 활용만 해서 스택을 구현하는 것이 문제입니다. //CLinkedList.h 헤더 파일로 저장 #ifndef C_LINKEDLIST_H #define C_LINKEDLIST_H #define TRUE 1 #define FALSE 0 typedef int Data; typedef struct Node { Data data; struct Node* next; } Node; typedef struct { Node* tail; Node* cur; Node* before; int numOfData; }CList; typedef CList Li..
주의 사항! 이 글은 제가 직접 공부하는 중에 작성되고 있습니다. 따라서 제가 이해하는 그대로의 내용이 포함됩니다. 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다. 이번 시간에는 연결 리스트를 기반으로 스택을 구현합니다. 그런데 이에 앞서 연결 리스트로 까다로운데 이걸로 스택을 구현하겠다니 걱정할 수도 있겠습니다. 하지만 전혀 그런 걱정할 필요가 없습니다. 스택의 구조는 매우 단순합니다. 예를 들어 연결 리스트에서 머리에 데이터를 추가하고 머리부터 데이터 조회를 한다면 그것이 바로 스택의 구조가 됨을 눈치챌 수 있습니다. 연결 리스트 기반 스택을 구현하기 위해서는 head 포인터가 필요합니다. 다음은 연결 리스트 기반 스택의 헤더 파일을 정의한 것입니다. //LBStack.h 헤더 파일로 저장..
주의 사항! 이 글은 제가 직접 공부하는 중에 작성되고 있습니다. 따라서 제가 이해하는 그대로의 내용이 포함됩니다. 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다. 배열 기반 스택의 구조는 정말 단순합니다. 만약 배열이 10개 선언되었다면, 배열의 0번지가 스택의 바닥이 됩니다. 탄창의 밑바닥과 같은 곳입니다. 그리고 데이터를 저장할 때마다 0번지, 1번지, 2번지, ... 순으로 저장 위치를 증가시킵니다. 그리고 가장 마지막에 데이터가 저장된 위치를 변수 top에 저장합니다. 따라서 만약 배열 기반 스택의 0번지부터 7번지까지 데이터가 저장되었다면 top은 7이 되는 것입니다. 앞서 스택의 ADT도 정의했고 구조도 이해했으니 이를 기반으로 스택 헤더 파일을 정의해 보겠습니다. //ABStac..