'자료구조'에 해당되는 글 3건

  1. 2013.01.06 스택 (Stack)
  2. 2012.12.19 자료구조와 알고리즘
  3. 2012.11.15 자료구조(Data Structure)에 대한 기본적인 이해

스택이란 '쟁반 위에 쌓인 접시', '쌓아 올려진 상자더미' 를 연상할 수 있겠다.

즉, 맨 밑에 상자(제일 먼저 들어간 데이터) 를 꺼내려면 위에 얹혀있는 상자들부터 꺼내야 꺼낼 수 있다. 이것이 바로 스택의 특성이다.

스택은 나중에 들어간 것이 먼저 나오는 구조이다 보니 '후입선출방식의 자료구조' 라고도 불리고, 영어로 'LIFO(Last-In, Fisrt-Out) 구조의 자료구조' 라고도 불린다.

실제로 스택은 쉽게 이해할 수 있고 또 숩게 구현할 수 있는 자료구조이다.


스택을 대표하는 넣고, 꺼내고, 들여다 보는 연산을 가리켜 각각 push, pop, peek 라고 한다.


void StackInit(Stack * pstack); 

- 스택의 초기화를 진행한다.

- 스택 생성 후 제일 먼저 호출되어야 하는 함수이다.

int IsEmpty(Stack * pstack);

- 스택이 빈 경우 TRUE(1)을 그렇지 않은 경우 FALSE(0)을 반환

void Push(Stack * pstack, Data data);

- 스택에 데이터를 저장한다. 매개변수 data로 전달된 값을 저장

Data Pop(Stack * pstack);

- 마지막에 저장된 요소를 삭제

- 삭제된 데이터는 반환된다.

- 본 함수의 호출을 위해서는 데이터가 하나 이상 존재함이 보장되어야 한다.

Data Peek(Stack * pstack);

- 마지막에 저장된 요소를 반환하되 삭제하지 않는다.

- 본 함수의 호출을 위해서는 데이터가 하나 이상 존재함이 보장되어야 한다.



실행결과에서 입력된 데이터가 역순으로 출력됨을 보이고 있다. 

그리고 이것이 스택의 가장 중요한 특성이다.


Posted by scii
:

실무에서는 자료구조를 직접 구현하지 않고 검증된 라이브러리를 가져다 쓴다. 그리고 그것은 합리적인 선택이다.

검증된 라이브러리를 활용하는 것이 안전성에서나 성능 면에서나 우월하기 때문이다.

하지만 라이브러리를 잘 가져다 쓰려면 리스트가 무엇이고 트리가 무엇인지 알아야 한다. 그냥 아는 것이 아니라 각각의 특성을 정확히 이해해야 한다.


알고리즘이란?

- 표현 및 저장된 데이터를 대상으로 하는 '문제의 해결 방법'을 뜻한다.


int arr[5] = {1,2,3,4,5};

for(idx=0; idx<5; idx++)

sum += arr[idx];

여기의 반복문은 배열의 저장된 모든 값의 합을 구하는 알고리즘이다. 하지만 자료구조가 결정되어야 그에 따른 효율적인 알고리즘을 결정할 수 있다.

만약 값이 저장된 자료구조가 배열이 아니었다면... 분명 알고리즘의 방법은 달라졌을 것이다. 


결론

- 자료구조에 따라서 알고리즘은 달라진다.

- 알고리즘은 자료구조에 의존적이다.

- 때문에 자료구조와 알고리즘은 분명 다른 과목임에도 불구하고 매우 많은 연관성을 지니고 있다.

Posted by scii
:
프로그램이란?

- 프로그램이란 데이터를 표현하고, 그렇게 표현된 데이터를 처리하는 것이다.

여기서 말하는 '데이터의 표현'은 '데이터의 저장'을 포함하는 개념이다. 그리고 이렇듯 '데이터의 저장'을 담당하는 것이 바로 자료구조이다.

자료구조의 분류


선형구조 - 리스트

   - 스택

   - 큐


비선형구조 - 트리

      - 그래프


파일구조 - 순차파일

   - 색인파일

   - 직접파일


단순구조 - 정수

   - 실수

   - 문자

   - 문자열

 

선형 자료구조는 그 이름이 의미하듯이 자료를 표현 및 저장하는 방식이 선형(Linear)이다. 선형이라는 단어의 뜻 그대로 '선의 형태'로 이해하면 된다.


즉, 선형 자료구조는 데이터를 선의 형태로 나란히 혹은 일렬로 저장하는 방식이다. 

반면, 비선형 자료구조는 그 이름이 의미하듯이 데이터를 나란히 저장하지 않는 구조이다.


Posted by scii
: