🐰 덱(deque) ? 덱은 double-ended queue의 줄임말로서 큐의 전단(front)나 후단(rear)에서 모두 삽입과 삭제가 가능한 큐이다. 덱의 연산 create() : 덱 생성 init(dq) : 덱 초기화 is_empty(dq) : 덱이 공백 상태인지 확인 is_full(dq) : 덱이 포화 상태인지 확인 add_front(dq,e) : 덱의 앞에 요소를 추가한다. add_rear(dq,e) : 덱의 뒤에 요소를 추가한다. delete_front(dq) : 덱의 앞에 있는 요소를 반환한뒤 삭제한다. delete_rear(dq) : 덱의 뒤에 있는 요소를 반환한뒤 삭제한다. get_front(q) : 덱의 앞에서 삭제하지 않고 앞에 있는 요소를 반환한다. get_rear(q): 덱의 뒤..
🔔 원형 큐 선형 큐에서 더 발전된 형태인 원형 큐를 살펴보자. 앞서 말했듯 선형 큐는 front와 rear의 값이 계속 증가만 하기 때문에 언젠가는 배열의 끝에 도달하게 되고 배열의 앞부분이 비어 있더라도 사용하지 못한다. 따라서 주기적으로 모든 요소들을 왼쪽으로 옮겨주어야 한다. 즉, 매번 요소들을 이동시키기 위해서는 상당한 시간과 복잡한 코딩이 소요된다. 원형 큐는 이러한 선형 큐들의 문제점을 해결한다. 배열을 선형이 아닌 원형으로 생각을 하는 건데 즉 front와 rear의 값이 배열의 끝인 (MAX_QUEUE_SIZE-1) 에 도달하면 다음에 증가되는 값은 0이 되도록 하는 것이다. 🔔 원형 큐 전체 코드 #include #include #define MAX_QUEUE_SIZE 5 typedef..

💬 큐 앞서 배웠듯 스택의 경우 나중에 들어온 데이터가 먼저 나가는 구조이다. 그러나 큐는 먼저 들어온 데이터가 먼저 나가는 구조이다. 즉, FIFO (First In First Out) 선입선출 형태를 띈다. 데이터는 큐의 후단(rear)에 삽입되고 전단(front)를 통해 나간다. 즉, 삽입과 삭제가 같은 곳이 아니라는 것 ! 더보기 - 전단(front) : 데이터의 삭제 연산 (가장 먼저 들어왔던 데이터가 쌓여있는 쪽) -> dequeue 연산 - 후단(rear) : 데이터의 삽입 연산 (가장 나중에, 최근에 삽입된 데이터가 쌓여있는 쪽) -> enqueue 연산 💬 큐의 연산 enqueue: 큐의 rear 에 새로운 원소를 삽입하는 연산 dequeue: 큐의 front에 있는 원소를 큐로부터 삭제..

먼저 스택을 전역변수(global variable)로 구현해보자. 여기서 전역변수란 중괄호 외부에 선언되는 변수다. #include #include #define MAX_STACK_SIZE 100 typedef int element; element stack[MAX_STACK_SIZE]; int top= -1; int is_empty(void) //공백 상태 검출 함수 { return (top==-1); } int is_full(void) //포화 상태 검출 함수 { return (top==(MAX_STACK_SIZE-1)); } void push(element item) { if(is_full()){ fprintf(stderr,"스택 포화 에러\n"); return; } else stack[++top]..

📌 스택이란 ? 스택은 팬케이크 더미를 떠올리면 이해하기 쉽다. 일반적으로 팬케이크를 쌓는 방향은 아래에서 위이다. 그러나 팬케이크를 먹을 때 우리는 쌓여진 맨 위의 펜케이크부터 먹게된다. 스택도 동일하다. Last In First Out (LIFO), 후입선출의 구조로 가장 나중에 들어간 원소가 가장 먼저 나오게 된다. 📌 스택의 연산 pop(): 스택에서 가장 위에 있는 항목을 제거한다. push(data): data를 스택의 가장 윗 부분에 추가한다. peek(): 스택의 가장 위에 있는 항목을 반환한다. isEmpty(): 스택이 비어 있는 경우 true를 반환한다. 📌 스택 연산 코드 creatStack 함수 : 스택을 생성하는 함수 parameter : 스택관리 구조체의 주소, 스택의 크기 성..
https://www.acmicpc.net/problem/2562 2562번: 최댓값 9개의 서로 다른 자연수가 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 번째 수인지를 구하는 프로그램을 작성하시오. 예를 들어, 서로 다른 9개의 자연수 3, 29, 38, 12, 57, 74, 40, 85, 61 이 주어 www.acmicpc.net 문제 9개의 서로 다른 자연수가 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 번째 수인지를 구하는 프로그램을 작성하시오. 예를 들어, 서로 다른 9개의 자연수 3, 29, 38, 12, 57, 74, 40, 85, 61 이 주어지면, 이들 중 최댓값은 85이고, 이 값은 8번째 수이다. 입력 첫째 줄부터 아홉 번째 줄까지 한 줄에 하나의 자연수가 주어진다. ..
https://www.acmicpc.net/problem/10818 10818번: 최소, 최대 첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다. www.acmicpc.net 문제 N개의 정수가 주어진다. 이때, 최솟값과 최댓값을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다. 출력 첫째 줄에 주어진 정수 N개의 최솟값과 최..
https://www.acmicpc.net/problem/10871 10871번: X보다 작은 수 첫째 줄에 N과 X가 주어진다. (1 ≤ N, X ≤ 10,000) 둘째 줄에 수열 A를 이루는 정수 N개가 주어진다. 주어지는 정수는 모두 1보다 크거나 같고, 10,000보다 작거나 같은 정수이다. www.acmicpc.net 문제 정수 N개로 이루어진 수열 A와 정수 X가 주어진다. 이때, A에서 X보다 작은 수를 모두 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 N과 X가 주어진다. (1 ≤ N, X ≤ 10,000) 둘째 줄에 수열 A를 이루는 정수 N개가 주어진다. 주어지는 정수는 모두 1보다 크거나 같고, 10,000보다 작거나 같은 정수이다. 출력 X보다 작은 수를 입력받은 순서대로 공백으..