[소스 코딩] ■ CircularQueue.h #ifndef CIRCULARQUEUE_H_#define CIRCULARQUEUE_H_ #define TRUE 1#define FALSE 0 #define QUE_LEN 100 typedef struct _cQueue{ int front; // 삭제할 데이터의 위치를 가리키는 변수 int rear; // 삽입할 데이터의 위치를 가리키는 변수 int queArr[QUE_LEN]; // QUE_LEN 길이를 갖는 큐 배열} CQueue; typedef CQueue Queue; void QueueInit(Queue * pq); // 큐 초기화 함수int QIsEmpty(Queue * pq); // 큐에 데이터가 존재하는지 확인하는 함수 void Enqueue(Qu..
[enqueue의 연산방식] ※ F(Front): 큐의 앞(출구)을 가리키는 포인터 변수※ R(Rear): 큐의 뒤(입구)를 가리키는 포인터 변수 - enqueue 연산 시 R이 배열의 다음 칸을 가리키고 그 자리에 새로 입력된 데이터를 저장- 첫 데이터가 저장될 때는 F와 R이 같은 위치를 가리킴 [dequeue] ■ 보편적인 배열의 삭제방식 - dequeue 연산 시 반환할 데이터를 배열의 맨 앞부분으로 이동 시키는 방식- F의 위치는 고정된 채로 데이터가 이동하기 때문에 F가 불필요- dequeue 연산 시마다 저장된 데이터를 한 칸씩 이동시켜야 하는 단점이 존재 ★ ■ 일반적인 방식 - F를 R처럼 한 칸씩 오른쪽으로 이동하면서 데이터를 삭제- 데이터의 위치를 옮길 필요없음 ■ 문제가 되는 상황 ..
[큐의 개념]- 먼저 저장된 데이터가 먼저 나오는 선입선출(FIFO. First-In, First-Out) 구조의 자료구조 [큐의 ADT]void QueueInit(Queue * pq);- 큐의 초기화를 진행- 큐 생성 후 제일 먼저 호출되어야 하는 함수 int QIsEmpty(Queue * pq);- 큐가 빈 경우 TRUE(1)을, 그렇지 않은 경우 FALSE(0)을 반환 void Enqueue(Queue * pq, Data data);- 큐에 데이터를 저장. 매개변수 data로 전달된 값을 저장 Data Dequeue(Queue * pq);- 저장순서가 가장 앞선 데이터를 삭제- 삭제된 데이터는 반환- 본 함수의 호출을 위해서는 데이터가 하나 이상 존재함이 보장되어야 함 Data QPeek(Queue..
[계산기 처리 과정] - 중위표기법 수식 → ConvToRPNExp 함수(후위표기법으로 변환) → EvalRPNExp 함수(후위표기법 계산) → 연산 결과 [소스 코딩] ※ 스택은 이전에 '연결 리스트 기반으로 구현된 스택' 소스를 활용※ 후위표기법으로 변환 처리는 이전에 'InfixToPostfix' 소스를 활용※ 후위표기법 계산 처리는 이전에 'PostCalculator' 소스를 활용 ■ ListBaseStack.h #ifndef __LB_STACK_H__#define __LB_STACK_H__ #define TRUE 1#define FALSE 0 typedef int Data; // 사용자 정의 int형 Data 선언 typedef struct _node // 사용자 정의 구조체 'Node' 정의{..
[소스 코딩]※ 스택은 이전에 '연결 리스트 기반으로 구현된 스택' 소스를 활용 ■ ListBaseStack.h #ifndef __LB_STACK_H__#define __LB_STACK_H__ #define TRUE 1#define FALSE 0 typedef int Data; // 사용자 정의 int형 Data 선언 typedef struct _node // 사용자 정의 구조체 'Node' 정의{ Data data; // 입력 받은 데이터를 저장할 data 선언 struct _node * next; // 다음 노드를 가리킬 노드 포인터 next 선언} Node; typedef struct _listStack // 사용자 정의 구조체 'ListStack' 정의{ Node * head; // ListSta..
[구현 원칙]- 피연산자는 무조건 스택으로 옮김- 수식 조회 시 연산자를 만나면 스택에서 2개의 피연산자를 꺼내어 계산 처리- 계산결과는 다시 스택에 저장 [계산 시 중요 포인트]- 스택에서 먼저 꺼낸 피연산자가 두 번째 피연산자가 됨(오른쪽)- 나중에 꺼낸 피연산자가 첫 번째 피연산자가 됨(왼쪽) [후위표기법 계산 과정] - 중위표기법에서 후위표기법으로 변환된 상태- 변환된 수식에서 맨 왼쪽부터 하나씩 처리 - 피연산자는 무조건 스택에 저장 - 피연산자는 스택에 저장 - 피연산자는 스택에 저장 - 연산자는 계산 수식으로 이동 - 연산자가 조회되면 스택에서 2개의 피연산자를 꺼냄- 처음 꺼낸 피연산자는 계산 수식의 연산자 '오른쪽'으로 이동- 다음 꺼낸 피연산자는 계산 수식의 연산자 '왼쪽'으로 이동 -..
[소스 코딩]※ 스택은 이전에 '연결 리스트 기반으로 구현된 스택' 소스를 활용 ■ ListBaseStack.h #ifndef __LB_STACK_H__#define __LB_STACK_H__ #define TRUE 1#define FALSE 0 typedef int Data; // 사용자 정의 int형 Data 선언 typedef struct _node // 사용자 정의 구조체 'Node' 정의{ Data data; // 입력 받은 데이터를 저장할 data 선언 struct _node * next; // 다음 노드를 가리킬 노드 포인터 next 선언} Node; typedef struct _listStack // 사용자 정의 구조체 'ListStack' 정의{ Node * head; // ListSta..
[구현하는 계산기 기능]- '후위 표기법 변환 알고리즘'을 사용하여 구현└ 중위 표기법 수식 방식으로 사용자에게 입력 받음 → 프로그램에서 후위 표기법 수식으로 변경 → 계산 및 출력 ※ 이유: 연산자의 우선순위를 신경쓰지 않아도 되고, 소괄호도 처리할 필요가 없기 때문 [구현 시 중요한 부분]- 소괄호를 파악하여 그 부분을 먼저 연산- 연산자의 우선순위를 근거로 연산의 순위를 결정 [구현 시 제한사항]- 수식을 이루는 피연산자는 한자리 숫자(0~9)로만 이뤄진다고 가정 [수식의 표기법] ※ 예) 5 + 2 / 7 1. 중위 표기법(infix notation): 5 + 2 / 7- 피연산자 사이에 연산자가 존재하는 일반적인 표기법 2. 전위 표기법(prefix notation): + 5 / 2 7- 각 ..
[소스 코딩]■ ListBaseStack.h#ifndef __LB_STACK_H__#define __LB_STACK_H__ #define TRUE 1#define FALSE 0 typedef int Data; // 사용자 정의 int형 Data 선언 typedef struct _node // 사용자 정의 구조체 'Node' 정의{ Data data; // 입력 받은 데이터를 저장할 data 선언 struct _node * next; // 다음 노드를 가리킬 노드 포인터 next 선언} Node; typedef struct _listStack // 사용자 정의 구조체 'ListStack' 정의{ Node * head; // ListStack에 노드 포인터 'head' 선언} ListStack; typede..
[소스 코딩] ■ ArrayBaseStack.h12345678910111213141516171819202122232425#ifndef __AB_STACK_H__#define __AB_STACK_H__ #define TRUE 1#define FALSE 0#define STACK_LEN 100 typedef int Data; // 사용자 정의 int형 Data 선언 typedef struct _arrayStack // 사용자 정의 구조체 'ArrayStack' 정의{ Data stackArr[STACK_LEN]; // 100의 배열 구조를 갖는 스택 선언 int topIndex; // 가장 위(마지막 데이터)를 가리키는 topIndex 선언} ArrayStack; typedef ArrayStack Stack..
[스택의 개념] - 나중에 저장된 데이터가 먼저 나오는 후입선출(LIFO. Last-In, First-Out) 구조의 자료구조 [스택의 ADT] void StackInit(Stack * pstack) - 스택의 초기화를 진행 - 스택 생성 후 제일 먼저 호출되어야 하는 함수 int SIsEmpty(Stack * pstack) - 스택이 빈 경우 TRUE(1)을, 그렇지 않은 경우 FALSE(0)을 반환 void SPush(Stack * pstack, Data data) - 스택에 데이터를 저장. 매개변수 data를 전달된 값을 저장 Data SPop(Stack * pstack) - 마지막에 저장된 요소를 삭제 ★ - 삭제된 데이터는 반환 - 본 함수의 호출을 위해서는 데이터가 하나 이상 존재함이 보장되어..
- Total
- Today
- Yesterday
- RA
- VCL
- ADODB
- 설명
- Delphi
- 대상
- 영어
- Reference
- 독해
- 응용
- 교육센터
- 상황
- wfd
- 스택
- 말하기
- 왕초보 영어회화 100일의 기적
- 작문
- tdataset
- 일기
- SWT
- SysUtils
- 문법
- 자료구조
- java
- 정렬
- 계산기
- System
- Pte
- 여행영어 100일의 기적
- 알고리즘
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |