스택
#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

+ Recent posts