C++/자료구조(18)
-
연결리스트를 이용한 큐 구현
2022.04.23 - [C++/자료구조] - 큐(Queue) 연결리스트를 이용한 큐 구현 큐는 front 와 rear 양 쪽 값에 접근해야 하기 때문에 포인터 두 개를 만들어야 한다. 삽입 삭제에 대해 각각 별도에 포인터가 사용된다. 삽입 명령에 대해서는 rear 포인터가 가리키는 노드 바로 다음에 이어 붙이면 되고, 삭제 명령에 대해서는 front 포인터가 현재 가리키고 있는 노드 바로 다음 노드를 가리키게 하면 된다. 다음은 위의 내용을 코드로 구현한 것이다. #include using namespace std; typedef struct Node { int Data; //큐 데이터를 정수 타입으로 가정 Node *Next; //다음 노드를 가리키는 포인터 변수 }node; class Queue {..
2022.04.23 -
큐(Queue)
큐 특징: 선입선출(FIFO) 즉, 큐에서 삽입은 맨 뒤에서 삭제는 맨 앞에서 이루어진다. 큐의 맨 앞을 큐 Front 맨 뒤를 큐 Rear라 한다. 또한 큐 Rear에 데이터를 삽입하는 것을 큐 Add(Enqueue) 큐 Front에서 데이터를 삭제하는 작업을 큐 Remove(Dequeue)라 한다.
2022.04.23 -
스택 응용 5. 괄호 매칭
C/C++에서는 중괄호를 사용하여 소스 코드를 묶는다. 소스 코드에 여는 괄호가 두 번 나왔다면 닫는 괄호도 반드시 두 번 나와야 한다. 실제로 이러한 문법 검증 작업은 컴파일에 의해 이루어지며 이를 위해 컴파일러는 스택을 사용한다. 다음은 유사코드로 작성한 괄호의 매칭이다. Matched = TRUE; //매칭 상태를 표시하는 변수 초기화 while(index
2022.04.23 -
스택 응용 4. 문자열 뒤집기
주어진 문자열이 들어오는 대로 스택에 푸시했다고 가정하면 마지막 문자는 스택 탑에 위치하게 된다. 따라서 문자열을 역순으로 표시하려면 순차적으로 팝을 가하면 된다.
2022.04.23 -
스택 응용 3. 진법 변환
10진수 26을 2 진수로 변환한다고 해보자. 먼저, 26을 2로 나누었을때, 나머지인 0을 push 한다. 그 몫인 13을 다시 2로 나누고, 나머지인 1을 push한다. 다시 그 몫인 6을 2로 나누고 나머지인 0을 push한다. 다시 그 몫인 3을 2로 나누고 나머지인 1을 push한다. 그 후 더이산 나눠지지 않는 몫인 1을 push한다. 2022.04.22 - [C++/자료구조] - 연결 리스트를 이용한 스택 구현 #include using namespace std; typedef int element; //int형 자료형에 element라 별칭 붙임. typedef struct Node //노드는 구조체 타입 { element Data; //스택 데이터를 정수 타입으로 가정 Node *Next..
2022.04.23 -
스택 응용 2. 후위 표현의 연산
중위표현 : 5+7처럼 연산자(Operator)가 피연산자(Operand)의 가운데에들어가는 표현이다. 후위표현 : 5 7 +처럼 연산자가 뒤로 가는 표현이다. 우리가 수식을 프로그램 할 때에는 중위표현을 사용하지만 이 표현은 나중에 컴파일러에 의해 후위표현으로 변환되어 실행된다. (2+5)*3-1 의 후위표현은 2 5 + 3 * 1 - 가 된다. 이 후위표현을 가지고 연산을 실행하면 다음과 같다. 언제라도 피 연산자가 들어오면 스택에 push한다. 연산자가 들어오면 스택에 쌓인 피연산자 두 개에 대해 해당 연산을 가하고 그 결과를 다시 스택에 푸시한다. 단, 그림처럼 먼저 팝 된 피연산자가 연산자의 오른쪽으로 가게 해서 연산을 가한다. 후위 연산의 연산과정을 코드로 나타내면 다음과 같다. #includ..
2022.04.23