스택(Stack) 구현 (C언어) : Part.1 - 초기 환경 설정 & 구현할 함수 소개
·
크래프톤 정글
이번에는 C언어를 이용해 스택을 직접 구현해보려고 한다. 링크드 리스트를 직접 구현했던 내용도 있으니 링크드 리스트에 대해서 부족하지만 정리했던 내용을 확인하려면 이 전 포스팅 했던 글을 확인하는 것도 좋을 것 같다.2025.04.16 - [크래프톤 정글] - 링크드리스트(LinkedList) 구현 (C언어) : Part.1 - 초기 환경 설정2025.04.16 - [크래프톤 정글] - 링크드리스트(LinkedList) 구현 (C언어) : Part.2 - insert_end, free_lsit2025.04.16 - [크래프톤 정글] - 링크드리스트(LinkedList) 구현 (C언어) : Part.3 - insert_front, print_list, find_node2025.04.16 - [크래프톤 정글..
링크드리스트(LinkedList) 구현 (C언어) : Part.6 - 수정 및 회고
·
크래프톤 정글
지금까지 링크드 리스트를 구현했다. 하지만 내가 처음 구현할 때 미처 생각지 못하고 넘어갔던 내용이 있다. 모든 함수를 Node를 이용해 호출하고 Node를 인자로 담고 있었다. 그렇다 보어 어떤 함수는 이중 포인터를 사용하는 함수가 되어 버렸다. 이 것을 수정하려고 한다.1. 구현 목표구조체 ll (linkedlist) 를 선언하고 모든 코드를 ll을 사용하도록 수정한다.typedef struct linkedlist { Node* head; int size;} ll;지금까지 구현했던 코드의 가장 앞 단에 위와 같은 코드를 추가할 것이다. 이 ll 구조체는 head라는 노드 타입의 포인터 변수이고 추가로 size라는 int 타입 변수를 가진다.Node** head와 같은 방식에서 ll 구조체(..
링크드리스트(LinkedList) 구현 (C언어) : Part.5 - reverse_list, sort_list
·
크래프톤 정글
지금까지 삽입, 삭제, 조회와 같은 기본 적인 구현을 진행했다. 아마 이번 포스팅 내용이 가장 어렵다고 느낄 수 있다. 바로 뒤집기와 정렬이다.1. 구현 목표reverse_list : 링크드 리스트의 노드들의 순서를 뒤짚는다.sort_list : 링크드 리스트 내부의 값들의 순서를 정렬한다.2. 기능 구현🔨 reverse_list링크드 리스트의 순서를 reverse 하기 위해 어떤 작업을 수행해야 할까?구현 아이디어이다.prev, cur, next라는 노드 포인터 변수를 만들고 각각 NULL, head, NULL로 초기화한다.현재 노드가 NULL 즉 가장 마지막까지 갈 때까지 while 반복을 진행한다.next 값을 현재 cur 노드의 next 노드로 저장한다.cur 노드의 다음 값을 prev 즉 이전..
링크드리스트(LinkedList) 구현 (C언어) : Part.4 - delete_node, insert_at
·
크래프톤 정글
4번째 포스팅이다. 이번 포스팅에서는 노드를 삭제하는 delete_node와 특정 인덱스 위치에 노드를 삽입하는 insert_at 기능을 구현해 보려고 한다.1. 구현 목표insert_at : 링크드 리스트의 중간 원하는 인덱스에 데이터를 추가한다.delete_node : 원하는 값이 있는 노드를 링크드리스트에서 삭제한다.이번 구현은 이전과 비교해 조금 복잡하게 느껴질 수 있다.2. 기능 구현🔨 insert_at링크드 리스트의 특정 index 위치에 data를 가지는 node를 추가해야 한다.구현 아이디어새로운 노드를 먼저 생성해 둔다.만약 index 값이 0 이라면 이 전에 구현했던 insert_front와 같이 추가를 하면 된다.현재 노드를 지정할 cur 변수를 만들고 head로 지정한다.count..
링크드리스트(LinkedList) 구현 (C언어) : Part.3 - insert_front, print_list, find_node
·
크래프톤 정글
이 전 포스팅에서는 링크드 리스트를 생성하고 값을 넣고 링크드 리스트를 해제하는 과정을 다루었다. 이번에는 링크드 리스트의 가장 앞에 노드를 추가하는 insert_front 함수가 현재 링크드 리스트에 있는 값을 전부 출력하는 print_list 마지막으로 링크드 리스트에서 특정 노드를 찾는 find_node까지 구현할 것이다.1. 구현 목표다음과 같은 기능을 이번에 구현할 것이다.insert_front : 링크드 리스트 가장 앞에 추가print_list : 현재 리스트 안의 값 전부 출력하기find_node : 링크드 리스트 안의 특정 값 찾기2. 기능 구현🔨 insert_front이 전 포스팅에서 insert_end를 구현했다. 마지막에 추가할 때는 링크드 리스트의 끝까지 찾아가는 반복문을 실행했는..
링크드리스트(LinkedList) 구현 (C언어) : Part.2 - insert_end, free_lsit
·
크래프톤 정글
이 전 포스팅에서 초기 설정을 진행했다. 이제 본격 적으로 구현을 시작할 것이다. 시작에 앞서 아마 실행을 해 봤을 수. 있는데 실행하면 현재 테스트 코드에서 호출하고 있는 함수들이 실제 구현되지 않았다고 에러를 발생시킬 것이다. 그래서 우리가 구현을 끝냈거나 구현을 진행할 예정인 테스트 코드는 제외하고 나머지는 주석 처리를 해 두면 된다.1. 구현 목표우리가 이번에 구현할 기능은 아래와 같다.create_node : 링크드 리스트에 추가할 노드 생성insert_end : 링크드 리스트의 끝에 노드 추가free_list : 링크드 리스트 전체 삭제 및 동적 메모리 해제링크드 리스트는 노드라고 하는 요소들을 연결해서 구현한다고 할 수 있고 그 말은 링크드 리스트를 구현하기 위해 먼저 노드를 만들 수 있어야..
링크드리스트(LinkedList) 구현 (C언어) : Part.1 - 초기 환경 설정
·
크래프톤 정글
크래프톤 정글 8기 37일 차 TIL 링크드리스트 구현하기 - C언어를 이용해 링크드 리스트를 직접 구현해보려고 한다. 아무래도 정글에서 준 과제는 링크드 리스트의 특성을 이용해 특정 함수를 구현하는 것을 요구하는데 과제만 해결하는 것을 넘어 직접 구현을 해 보면서 익히는 것이 더 좋을 것 같아서 직접 구현을 진행해 보려 한다. 링크드 리스트에 대해서 부족하지만 정리했던 내용을 확인하려면 이 전 포스팅 했던 글을 확인하는 것도 좋을 것 같다.2025.04.10 - [크래프톤 정글] - 크래프톤 정글 8기 - TIL 31일차 (링크드 리스트 - C)링크드 리스트 구현 전 준비본격 적으로 구현을 시작하기 전 준비해야 할 사항이 있다. 먼저 나는 구현의 검증을 담당해 줄 테스트 코드를 미리 작성해 두었다. 그..
보이어-무어 문자열 검색 알고리즘
·
크래프톤 정글
크래프톤 정글 8기 - 36일차 TILBoyer-Moore 문자열 검색 알고리즘 정리Boyer–Moore 알고리즘은 문자열 검색 알고리즘 중에서도 가장 빠르고 실용적인 알고리즘 중 하나다. 이 글에서는 Boyer-Moore 알고리즘의 기본 개념, 핵심 규칙(Bad Character Rule, Good Suffix Rule), 그리고 실제 탐색 방식에 대해 정리한다.1. Boyer-Moore 알고리즘의 핵심 아이디어"비교는 오른쪽 끝부터 시작하며, 실패하면 패턴을 최대한 멀리 점프시킨다."일반적인 문자열 검색은 왼쪽부터 비교하지만,Boyer–Moore는 오른쪽부터 왼쪽으로 비교한다.실패 시, 두 가지 규칙 중 더 먼 쪽으로 점프하여 검색 속도를 높인다.보이어-무어 알고리즘에서는 한국어로 "건너뛰기 표(sk..
KMP (Knuth-Morris-Pratt) 문자열 검색 알고리즘
·
크래프톤 정글
크래프톤 정글 8기 - 35일 차 TILKMP (Knuth-Morris-Pratt) 문자열 검색 알고리즘 정리문자열 검색 알고리즘 중 하나인 KMP 알고리즘은 텍스트에서 특정 패턴이 존재하는지 빠르게 찾아내기 위한 알고리즘이다. 이 글에서는 KMP 알고리즘의 동작 원리와 핵심 개념인 LPS(Longest Prefix Suffix) 배열을 중심으로 정리하였다.1. KMP 알고리즘의 핵심 아이디어"문자열 검색 중 일치하지 않으면, 이미 비교한 정보를 활용해 중복 비교를 피한다"일반적인 완전 탐색은 실패하면 항상 패턴의 처음부터 다시 시작하지만, KMP는 패턴 내의 반복 구조를 이용해 비교 위치를 점프할 수 있다. 이로 인해 최악의 시간복잡도가 O(n + m)으로 매우 효율적이다.2. LPS (Longest ..
그래프톤 정글 8기 - 5주차 시작 전 회고
·
크래프톤 정글
📝 주간 학습 회고 (TWL) - 2025년 04월 5주차정글 입소 35일 차 5주 차 시작 전 4주차 회고 및 5주차 목표 설정🎯 이번 주 목표C 언어 학습링크드 리스트, 큐, 스택 구현 처음부터 수행하기알고리즘 문제 풀이 멈추지 않기📚 학습한 내용포인터, 구조체크래프톤 정글 8기 - 32일 차 TIL (포인터)링크드리스트 - C크래프톤 정글 8기 - TIL 31일 차 (링크드 리스트 - C)💡 새롭게 알게 된 것내부 단편화, 외부 단편화🔍 어려웠던 점 / 해결 방법어려웠던 점해결 방법c언어로 자료구조의 직접 구현처음부터 직접 구현하며 구조 이해5주차 진입 후 어떤 것부터 해야할지 막막했다.주위에서 어떻게 하겠다는 것을 주워 듣고 우선순위 판단🛠️ 만든 것 / 작업한 것C 언어 테스트 기반 ..