스택(Stack) 이란? 스택 자료구조는 마치 접시가 쌓이는 것과 비슷하다. 당신이 접시를 쌓는다면 아래부터 위로 차근차근히 접시를 쌓게 될 것이다. 이 때 가장 위에 있는 접시를 가장 먼저 꺼낼 수 있을 것이고 가장 아래에 있는 접시는 가장 나중에 꺼낼 수 있을 것이다. 스택도 이와 동일하다. Last In First Out(LIFO) 구조로 가장 나중에 들어간 원소가 가장 먼저 나오게 된다. 스택의 연산은 Push, Pop 으로 단순하다. Push 연산시 가장 위에 원소를 추가하게 되고, Pop 연산시 가장 위의 원소를 반환한다. C언어 구현 스택을 구현 할 때는 배열로 구현할 수도 있고, 연결리스트(Linked List)를 이용해 구현할 수도 있다. 여기서는 배열을 이용해 간단히 구현해본다. 1. ..
배열과 연결리스트는 순차적으로 데이터를 저장한다는 점에서 비슷하다. 두 자료구조에 대해서 알아보자. 배열(Array) 배열은 논리적 저장순서와 물리적 저장순서가 일치하는 자료구조이다. 즉 인덱스(index)로 해당 원소에 접근 할 수 있다. 따라서 원소의 인덱스값을 이용하면 O(1)에 해당 원소에 접근 할 수 있다. 그러나 삭제 또는 삽입의 과정에서 추가적인 시간이 소요될 수 있다. 예를 들어 아래와 같은 상황에서 배열의 첫번째 자리(Arr[0])에 새로운 원소를 추가한다고 하자. 위와 같은 상황에서 Arr[0] 에 데이터 10을 추가하기 위해서는, Arr[0] 부터 Arr[4] 까지 모든 원소가 한 칸 씩 오른쪽으로 이동하게 된다. 즉, 원소를 삽입할 때 최악의 경우 모든 원소들을 1씩 옮기는 작업이 ..
연결리스트(Linked List)란? -연결리스트(Linked List)는 각 노드가 데이터와 포인터를 가지고 한 줄로 연결되어 있는 방식으로 데이터를 저장하는 자료구조이다. - 각 노드는 다음 노드를 가리키는 포인터를 포함한다. - 다음 노드를 가리키는 포인터는 다음 노드의 주소를 값으로 가지고 있다. - 각 노드의 포인터 변수는 다음 노드의 데이터의 주소를 값으로 가진다. 또한 각 포인터 변수의 주소도 따로 존재한다. (그림에 나타난 주소는 정확하지 않다. 이해를 돕기 위해 임의로 설정했다. 실제 주소값은 저런식으로 저장되지 않는다) 단순연결리스트(Singly Linked List)의 구현 가장 간단한 연결리스트인 단순 연결리스트를 구현해보자. 여러 구현 방법이 있지만, 아래 내용들을 응용하면 다양한..