자료구조 6

[C언어] NULL 포인터

C언어에서 포인터는 주소를 저장하는 변수이다. 포인터 변수를 역참조하여 그 값을 알아낼 수 있고 원본을 변경하는 함수도 포인터를 받아서 사용한다. 여기서 NULL 포인터가 헷갈릴 수 있다. 지금까지 내가 이해한 바로 정리하면 NULL 포인터는 포인터 값이 비트 패턴으로 0인 포인터를 뜻한다. 보통 x86 아키텍쳐로 컴파일한 포인터의 크기는 4byte이고 예를들어 기본 타입의 주소를 포인터에 저장하면 그 값은 보통 0023FF3A 이런 식으로 나오는데 이 값이 00000000인 값을 NULL 포인터라고 부른다. NULL 포인터는 역참조 시 운영체제에 의해? 런타임 에러를 야기하고 다른 주소와 차이점은 역참조 여부라고 할 수 있다.

자료구조 2022.07.04

[C언어] 큐와 덱

큐와 덱도 다른 자료구조와 마찬가지로 배열과 연결 리스트 두 가지 방법으로 구현할 수 있다. 이 두가지의 차이점이라고 한다면 배열은 선언과 동시에 메모리의 크기가 정해지므로 크기에 있어서 유연하지 못하고 이는 꽤 많은 문제를 야기한다. 큐의 삽입 또는 삭제 시 배열의 원소를 모두 한 칸 씩 옮기는 경우가 생기고 이는 매우 비효율적이다. 이를 해결하려 배열을 이용한 큐는 빙빙 돌 수 있게 원형 큐를 사용한다. 프로그래밍을 공부하다 보면 어떻게든 해결하는 모습이 꽤 인상깊다. 자바스크립트 작동 원리에 콜백 큐가 쓰이는데 궁금한 건 콜백 큐를 구현하고 구현한 것을 이용하는 건지 구현을 하는 과정에서 큐와 같은 기능이 쓰임으로 콜백 큐라고 불리는 지이다. 머 어쨌든 작동 원리가 큐와 같다는 건 분명하고 언젠간 ..

자료구조 2022.04.24

다른 시스템 속 자료구조

C언어로 자료구조를 구현하면서 운영체제나 데이터베이스도 C와 같은 방식으로 자료구조를 구현하는 지 궁금증이 들었다. C언어가 메모리에 직접 접근이 된다곤 하지만 어셈블리 코드를 보는 정도이지 어떻게 언어를 파싱하는 지 모른다. 고로 운영체제에서의 자료구조는 C언어의 배열, 리스트 따위 들과 비슷하게 구현되는 가 아니면 꽤 차이가 있는걸까.

자료구조 2022.04.22

[C언어] 스택

배열과 리스트를 구현할 줄 안다면 스택 구현에는 큰 어려움이 없어보인다. 스택의 추상 자료형(ADT)는 초기화, 삽입, 삭제, 확인 정도로 아주 간단하고 이는 리스트 또는 배열로 쉽게 구현할 수 있다. 웹개발을 하면서 스택이란 단어는 자주 등장하게 되는데 이는 스택이란 자료구조의 중요성과 유용성이 높다는 것을 뒷받침 한다고 생각한다. 내가 보고 있는 책에선 스택의 활용으로 계산기 만들기를 학습한다. 이를 통해 계산기의 원리와 컴퓨터가 어떻게 컴퓨팅 하는 지 조금은 더 이해할 수 있게 되었다. 우선 우리가 사용하는 수식의 표기법은 중위 표기법으로 이 표기법 만으로는 컴퓨터가 계산하기 어렵다고 한다. 그래서 개발한 것이 컴퓨터에게 맞춘 전위 표기법, 후위 표기법이다. 이는 컴퓨터가 컴퓨팅 하기 편하게 사실 ..

자료구조 2022.04.22

[C언어] 리스트

작년 이맘 때 즈음 포인터와 주소를 알지도 못한 채 자료구조를 접하였다. 다른 웹개발 입문 강의에서 배우기로 변수에 값이 담긴다 정도로만 배운 나는 자료구조를 코드 복붙과 복붙한 코드의 함수를 사용하는 것 외엔 할 수 있는 것이 없었다. 배열은 대부분의 문법에서 지원하는 자료구조라 배열을 이용한 리스트는 그나마 익숙했지만 연결 리스트로 넘어가는 순간 헷갈림의 순환으로 빠져버렸다. 하나의 객체(또는 구조체) 안에 데이터와 다음 객체를 가리키는 변수가 있다고 하는데 다음 객체를 가리키는 변수가 와닿지 않았다. 변수 안에 값이 있는 건지 그 값 안에 왜 다음 값이 있는 지 .. 이는 C언어의 포인터를 알고 이해되기 시작했다. 리스트가 어디에 쓰이는 지 생각해보면 회사 경험이 적은 나로선 블록체인 정도 떠오른다..

자료구조 2022.04.20

[C언어] 자료구조

자료구조의 뜻을 위키피디아에서 보면 다음과 같다. 자료구조(資料構造, 영어: data structure)는 컴퓨터 과학에서 효율적인 접근 및 수정을 가능케 하는 자료의 조직, 관리, 저장을 의미한다. 더 정확히 말해, 자료 구조는 데이터 값의 모임, 또 데이터 간의 관계, 그리고 데이터에 적용할 수 있는 함수나 명령을 의미한다. 신중히 선택한 자료구조는 보다 효율적인 알고리즘을 사용할 수 있게 한다. 이러한 자료구조의 선택문제는 대개 추상 자료형의 선택으로부터 시작하는 경우가 많다. 효과적으로 설계된 자료구조는 실행시간 혹은 메모리 용량과 같은 자원을 최소한으로 사용하면서 연산을 수행하도록 해준다. 처음봤을 땐 별로 와닿지가 않았다. 그냥 코딩 테스트에 자료구조, 알고리즘이 중요하다 정도로만 생각하고 넘..

자료구조 2022.04.20