스택
#include <stdio.h>
#include <cassert>
enum { MAX_NUMS = 8};
int s_nums[MAX_NUMS];
size_t s_num_count = 0;
void push(int arr[], int n)
{
//시간 복잡도 O(1)
assert(s_num_count < MAX_NUMS);
arr[s_num_count++] = n;
}
int is_empty(void)
{
return s_num_count == 0;
}
int pop(void)
{
//시간 복잡도 O(1)
assert(is_empty() == false);
return s_nums[--s_num_count];
}
int search(int n)
{
//시간 복잡도 O(N)
//제일 위부터 찾을 때까지 검색
int result = -1;
size_t temp_count = s_num_count;
while (s_num_count > 0)
{
int value = pop();
if (value == n)
{
result = s_num_count;
}
}
s_num_count = temp_count;
return result;
}
int main()
{
push(s_nums, 88);
push(s_nums, 44);
push(s_nums, 22);
printf("%d\n", search(22));
push(s_nums, 11);
push(s_nums, 5);
for (size_t i = 0; i < s_num_count; i++)
{
printf("%d\n", s_nums[i]);
}
printf("%d\n", search(5));
return 0;
}
push와 pop으로 이루어진 스택 자료구조. 간단하다
주의할점은 search할때 pop으로 망가진 배열을 다시 원상 복구 해줘야한다는점..
큐
#include <stdio.h>
#include <cassert>
enum { MAX_NUMS = 8};
int s_nums[MAX_NUMS];
size_t s_front = 0;
size_t s_back = 0;
size_t s_num_count = 0;
int is_empty(void)
{
return s_num_count == 0;
}
void enqueue(int n)
{
assert(s_num_count < MAX_NUMS);
s_nums[s_back] = n;
s_back = (s_back + 1) % MAX_NUMS;
++s_num_count;
}
int dequeue(void)
{
int ret;
assert(is_empty() == false);
ret = s_nums[s_front];
--s_num_count;
s_front = (s_front + 1) % MAX_NUMS;
return ret;
}
int search(int n)
{
//시간 복잡도 O(N)
int result = -1;
for (size_t temp = s_front; temp < s_back; temp++)
{
if (s_nums[temp] == n)
{
result = temp - s_front;
}
}
return result;
}
int main()
{
enqueue(10);
enqueue(20);
enqueue(30);
enqueue(40);
enqueue(50);
dequeue();
dequeue();
printf("%d\n", search(30));
return 0;
}
'C' 카테고리의 다른 글
문자열 뒤집기(포인터 사용) (0) | 2020.03.12 |
---|---|
해쉬테이블 기초(간단) (0) | 2020.02.28 |
C언어 빌드과정(컴파일) (0) | 2020.02.25 |
C언어 배열 삽입, 삭제 (2) | 2020.01.03 |
C언어 void* (0) | 2019.12.20 |