4장, 5장 연결리스트2, 3 요약

교재: 윤성우의 열혈자료구조
new air max
연결리스트(Linked List)를 사용하는 이유?
배열은 메모리의 특성이 정적이어서(길이의 변경이 불가능해서) 메모리의 길이를 변경하는 것이 불가능하다. 그래서 이를 극복하기 위해서 사용하는 것이 동적인 메모리이다.
Get Oakley sunglasses
새로운 노드를 추가할 때, 리스트의 머리와 꼬리 중 어디에 저장하는 것이 좋을까?

  • 머리에 넣을 경우: 포인터 변수인 꼬리가 불필요하지만 저장된 순서를 유지할 수없다.
  • 꼬리에 넣을 경우: 저장된 순서는 유지할 수 있지만 포인터 변수인 꼬리가 필요하다.
리스트의 자료구조의 정의에서 데이터의 저장순서는 없으므로, 머리에 넣어도 상관은 없으므로 일반적으로는 노드를 머리에 추가하는 방식을 택한다.
더미 노드(Dummy or Sentinel Nodes)
더미 노드는  리스트에 맨 앞에 추가되는  비어 있는 노드를 말한다. 더미 노드가 필요한 이유는 노드의 삽입, 조회, 삭제 시에 코드의 일관성을 줄 수 있기 때문이다. 만약 더미 노드가 없다면 첫 번째 노드를 조작할 때와 다른 노드를 조작할 때의 코드가 달라야 하기 때문에 코드가 복잡해 진다.

원형 연결 리스트 (Circular Linked List)
oakley sunglasses repair
양방향 연결 리스트 (Double Linked List)

3장 연결리스트1 – (2) 요약

교재: 윤성우의 열혈 자료구조
ray ban sunglasses online
리스트(List)
nike air jordan 1
What?
단어의 뜻 그대로 데이터를 나란히 저장하는 자료구조이다. 나란히 줄을 세워 데이터를 저장하되 데이터의 중복은 고려하지 않는 자료구조이다.
ray ban sunglasses cheap
Why?
데이터를 저장함에 있어서 가장 일반적인 방식 아니겠는가? 일상생활에서도 우리가 책꽂이에 책을 꽂을 때도 나란히 순서대로 책을 꽂는 것을 생각해 보면 자연스러운 데이터 저장 방식 중 하나가 리스트라는 것을 금방 알 수 있다.완벽하게 대응하는 것은 아니지만 실제 컴퓨터 안에 저장장치 중 하나인 메모리 구조 역시 리스트라고 할 수 있다.
Spain Oakley sunglasses
How?
위에서 잠깐 언급한 것과 같이 메모리의 저장방식 역시 리스트와 유사하기 때문에 리스트를 구현하는 것은 어렵지 않다. 기본타입인 배열을 이용해서 구현하면 되기 때문이다. 이러한 구현방식을 순차리스트라고 한다. 또 다른 근 방법으로는 메모리의 동적할당을 이용한 방식으로 연결리스트가 있다. 물론 두 가지 방식의 장단이 있다. 추후에 연결리스트를 공부하면서 비교할 수 있게 될 것이다.

리스트의 ADT (교재 내용)
Operation:
Void ListInit(List *plist);
– 초기화할 리스트의 주소 값을 인자로 전달
– 리스트 생성 후 제일 먼저 호출되어야 하는 함수이다.

Void LInsert(List *plist, LData data);
– 리스트에 데이터를 저장한다. 매개변수 data에 전달된 값을 저장한다.

int LFirst(List *plist, LData *pdata);
– 첫 번째 데이터가 pdata가 가리키는 메모리에 저장된다.
– 데이터의 참조를 위한 초기화가 진행된다.
– 참조 성공 시 TRUE(1), 실패 시 FALSE(0) 반환

int LNext(List *plist, LData *pdata);
– 참조된 데이터의 다음 데이터가 pdata가 가리키는 메모리에 저장된다.
– 순차적인 참조를 위해서 반복 호출이 가능하다.
– 참조를 새로 시작하려면 먼저 LFirst 함수를 호출해야 한다.
– 참조 성공 시 TRUE(1), 실패 시 FALSE(0) 반환

LData LRemove(List *plist);
– LFirst 또는LNext 함수의 마지막 반환 데이터를 삭제한다.
– 삭제된 데이터는 반환된다.
– 마 지막 반환 데이터를 삭제하므로 연이은 반복 호출을 허용하지 않는다.

int LCount(List *plist);
– 리스트에 저장되어 있는 데이터의 수를 반환한다.

3장 연결리스트1 – (1) 요약

교재: 윤성우의 열혈 자료구조
Greece air jordan
추상자료형(ADT, Abstract Data Type)
oakley square wire sunglasses
What?
구체적인 기능의 완성과정을 언급하지 않고, 순수하게 기능이 무엇인지를 나열한 것
nike air jordan 1 retro black metallic gold
Why?
사용자에게 사용방법 이외의 불필요한 부분까지 알도록 부담을 주지 않는다. 사용자는 구현에 관심을 두지 않고 자료형의 기능에만 관심을 두게 함으로써 프로그래밍 코드의 재사용을 높이게 된다. 이는 프레임웍이나 API, 레이어를 사용하는 것과 같은 접근 방식인 셈이다.
ray ban retro sunglasses
How?
자료형의 명칭과 그 기능을 나열하거나 추가로 자료형의 구성을 포함하기도 한다. 정해진 ADT의 표준이 있는 것은 아니다.
baseball oakley sunglasses
왜 자료구조에서 ADT를 논하는가?
ADT는 자료구조를 만드는 데 있어서 설계도와 같은 역할을 한다. 좀 더 정확한 표현으로는 자료구조의 명세서(specification)와 같은 것이다. ADT를 통해 앞으로 학습할 자료구조의 명세를 정의하고 이를 구현하는 것이다.

2장 재귀 요약

교재: 윤성우의 열혈 자료구조
Low Price ray ban sunglasses
What?
재귀함수는 함수 내에서 자기 자신을 다시 호출하는 함수를 말함
air jordan release dates
Why?
자료구조나 알고리즘의 어려운 문제를 단수화 하는데 좋은 도구이다. 그러나 직관적인 이해가 필요하고 가독성은 떨어질 수 있다. 또한 자신을 계속해서 호출하기 때문에 시스템의 리소스를 차지하고 속도저하도 일으킬 수 있다.
air max 90 premium
How?
재귀로 문제를 풀기 위해서는 먼저 문제에서 반복되는 패턴을 발견할 수 있어야 한다. 반복되는 패턴이 있다면 다음에는 반복을 멈출 수 있는 탈출조건을 고려해야 한다. 결과적으로 구현 시에는 반드시 탈출조건을 먼저 체크한 후 자신을 반복해서 호출하게 해야 한다. 이 때 중요한 것은 반복하는 자신의 함수에 전달되는 인자는 그 범위가 축소되어야 한다는 점이다.
oakley canteen sunglasses
재귀를 활용한 대표적인 문제는 팩토리알, 피보나치 수열, 하노이의 탑  등이 있다.

1장 자료구조와 알고리즘의 이해 요약

교재: 윤성우의 열혈 자료구조
nike air jordan 4
What?
자료구조는 데이터의 표현과 저장 방식

Why?
데이터의 효율적인 활용을 위해서다. 따라서 자료구조를 효과적으로 요리하려면 해당하는 자료구조에 맞는 적절한 알고리즘이 필요하게 된다. 위로부터 알고리즘은 자료구조에 의존적이라는 것을 알 수 있다.
ray ban sunglasses Korea
데이터의 효율을 어떻게 알아?
알고리즘의 성능을 분석하면 된다. 이 때 쓰는 척도로 시간복잡도(time complexity)와 공간복잡도(space complexity)가 있다. 그렇지만 주로 시간복잡도가 알고리즘을 측정하는 주된 척도가 된다는 점.

알고리즘의 시간복잡도를 구할 때는 주요한 (다른 연산들의 회수를 결정하는) 연산의 횟수를 센다. 이론 상 평균적인 연산회수를 적용하면 좋겠지만 쉬운 일이 아니다. 또한 입력 되는 데이터의 양이 급증하게 될 때 최악의 상황에서의 연산횟수가 미치는 영향이 크다. 그래서 보통 최악의 상황(worst case)를 측정하여 성능을 분석한다.
air jordan retro 12
알고리즘의 최악의 상황의 성능이 어떤 (얼마만큼 횟수가 증가하는지)경향성을 지니는지를 표기하는 방법으로 표적인 빅-오 표기법이 있다. 빅-오표기법은 입력 데이터의 크기(n)이 점차 커질 때(n>K), 알고리즘의 연산 횟수의 함수 f(n)의 변화 패턴의 상한선( f(n) < Cg(n) ) 을 나타내 준다. 대표적인 빅-오표기의 크기 비교는 아래와 같다.

O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n)cheap oakley sunglasses for sale

How?
지금부터 공부하게 될 구체적인 자료구조 들이지, 큰 범주로 선형구조의 리스트, 스택, 큐가 비선형구조로 트리와 그래프가 중요한 학습 콘텐츠다.