윈플


연결 리스트 ( Linked List)
: 여러 데이터의 집합을 서로 연결시키는 형식.
  데이터가 모여 있는 그룹인 노드와 노드를 연결시키는 링크로 이루어져 있습니다. 



>종류<



1) 단방향  연결 리스트 
: 단순히 한쪽 방향으로만 연결된 단방향 링크드 리스트

-> 자료 생성시, 노드가 생성되고 포인터는 생성된 포인터를 가리킵니다. 


2) 쌍방향 or( 양방향 ) 연결 리스트 
: 양쪽 방향으로 연결된 쌍방향 링크드 리스트

-> 자료 생성시, 노드가 생성되고 전 노드의 포인터는 생성된 포인터를 가리킵니다.  
    그리고 생성된 노드의 Prev 포인터는 전 노드를 가리킵니다.

3) 환형 연결 리스트
: 고리의 처음과 끝이 함께 연결되어 있는 링크드 리스트

-> 양방향과 같지만, 마지막 노드의 Next 포인터는 처음을 가리키는 부분이 추가됩니다.

 
일반적인 단방향 연결 리스트를 아래처럼 사용한다면

typedef struct LinkList* pointer;
struct LinkList
{
int data;
pointer next;
}; 

양방향과, 환형의 경우 전,후를 가르치는 포인터가 하나 더 있다고 생각하시면 편합니다.

struct LinkList
{
int data;
pointer next;
        pointer prev;  
}; 

 

Comment +0


저번 시험에서 몰랐던 자료구조 중 하나 ㅠ

MAP 이란 자료구조는 무엇일까?

: 으로 이루어지며 하나의 키에 대해서 하나의 값만을 가진다.(1:1)  
  이런 자료구조의 특성은 중복된 정답을 걸러주는 역할을 할 수 있다.
  
 ( Key 는 중복불가, Value 는 중복가능 )



 #include <map> // map 을 사용하기 위해서 필요

조건1
: key/value 쌍운 반드시 할당 및 복사 가능.

조건2
: key는 반드시 정렬 기준에 따리 비교 가능.
 

Comment +0


1. 스택 (stack)

 : [명사] 동적이고 순차적인 자료의 목록. 
 : [영어] 무더기, 많음 다량, 굴뚝

등 여러 의미로 사용되는 스택은 자료구조에서는 무언가를 쌓는다라는 의미를 갖는 자료구조입니다. 
즉. 자료를 순서대로 쌓아서 보관하고 사용한다.

모양으로 살펴보면.. 

                                                          


다음과 같이 밑에 있는 것을 빼기위해서는 쌓인 순서대로 빼야지 사용가능 합니다.
넣는 방향성 ▼ 빼는 방향성 ▲
그래서 일반적으로 LIFO ( Last In First Out ) :  후입선출 이라고 불립니다.
( 제일 마지막에 삽입된 원소가 제일 먼저 삭제되기 때문에... ) 

스택에서 사용되는 함수로는 PushPop가 있겟습니다. (Push : 자료넣기&입력, Pop : 자료빼기&삭제 )
                          변수는 Top (초기값 : -1 , 꼭데기 즉 가장 위의 변수를 가리키는 변수 ) 

< 예외처리 부분 >
단, 자료가 없을 때 Pop을 한다면 자료가 없기에 뺄수도 없죠, 이때 발생하는 Err를 "Stack Underflow"라고 합니다.  
또한 반대로 스택의 크기, 즉 배열의 크기 이상의 자료를 Push 할 때도 자료를 넣을 수 없으므로 "Stack Overflow"
Error가
 발생합니다. 


2. 큐 (queue )

: 규, 대기 행렬, 줄을 서서 기다리다
: 꼬리, 끝, 후미

                                 

"Stack의 단점"
무언가를 기다리는 사람들은 자연스럽게 대기하기 위해서 줄을 스게 된다.
먼저 온 사람이 제일 앞에 있다. 하지만 stack으로 처리하게 된다면!!
LIFO 라는 자료구조 형태로 나중에 온 사람이 먼저 일을 처리하게 되는 단점이 있다.


즉, 오래 기다린 사람이 먼저 나간다. 무언가를 산다. 바로 큐 이다.
그래서 큐(queue)는 FIFO ( First In First Out ) : 선입선출 이라고 불리며, 프로세스 처리, CPU 관리 에서
많이 사용된다.


[문제점!!!]
큐의 문제점은 일반적으로 배열을
[1][2][3][4][5] 
이런 직선 형태로 보왔을 때, 
[Pop][2][3][4][5] 가장 오래기다린, 처음 들어온 [1]이라는 데이터가 Pop이 되면 다른 데이터들을 차례대로
땡겨주어야 한다.

( 소수의 자료의 경우는 상관이 없지만 많은 데이터의 경우 연산에 많은 시간이 걸린다. )

이러한 문제점을 해결하기 위해 나온게 원형 큐, 순환 큐, 환영 큐 라고 불리우는 방법이다.



 

배열을 직선으로 보는게 아니라 원형으로 보는 방법이다. 

큐에서 사용하는 변수로는 Front  : 처음이며, 자료가 나갈 경우(pop) 이 부분의 변수가 나가고 --
                                       ( -1 라면, 자료의 끝으로 감 )
                               Rear  : 꼬리라고 보시면 되고, 입력 될 경우 이 부분에 입력되고 ++
               (자료의 끝이라면 0이라고 하시면 됩니다.)
가 있습니다. 
 


Comment +0


객체.

정의 : 객체(object)는 계산을 수행하고 상태를 갖는 개체. 따라서 객체는 데이터와 절차적 요소의 결합으로 볼 수 있다.
by Grady Booch 「객체 지향 설계와 응용」 
 

객체 지향 프로그래밍.

정의
(1) 객체는 기본적인 구성 단위
(2) 각 객체는 어떤 타입의 인스턴스
(3) 클래스는 상속 관계에 의해 서로 연관.
(상속을 사용하지 않는 프로그래밍 기법은 객체 지향 기법이 아니다!

객체 지향 언어.

정의
(1) 객체를 지원
(2) 모든 객체는 클래스에 속한다.
(3) 상속을 지원 



부제 : 각 언어의 차이점들..


CC++의 차이점?

크게 C 는 절차 지향성 언어, C++ 는 객체 지향성 언어라고 한다.
하지만 사실 C++의 기본은 C이며, 단순히 C를 좀더 편리하게 사용하기 위해서 여러 레퍼런스를 추가한게 C++라고 
봐도 무방하다.

ex) C에서 문자열을 사용하려면 char * 사용하지만 C++ 에서는 String이라는 레퍼런스를 통해 좀 더 편하게 사용할 수 있다.

C++ JavaScript의 차이점?

c++는 객체 지향 언어이다.
하지만 JavaScript는 객체 기반 언어이다. 
( 이유는 JavaScript는 객체 지향 언어의 정의중 (1)과 (2)는 지원하지만 상속 기능을 지원하지 않기 때문이다. ) 

Java는 상속을 지원한다.
(java 와 javascript는 다르다)
- 관련 지식in 링크 : 
http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=1040201&docId=106727025&qb=amF2YeyZgCBqYXZhc2NyaXB0&enc=utf8&section=kin&rank=1&search_sort=0&spq=0&pid=gwscYc5Y7uKssZnI4pRssc--311051&sid=TwAGmq-2-04AAGLLJWc 

Java에서의 상송.
1. extends 상속 키워드  
2. class 서브클래스(상속받는클래스) extends 슈퍼클래스(상속해주는)
3. 자바는 단일 상속만 지원한다.
4. private 변수 및 메서드 모두 상속되지 않는다.
5. 상속시 서브클래스 객체를 생성하면 슈퍼클래스가 먼저 메모리에 생성되고 난후 서브클래스가 생성된다.
6. 자바는 기본적으로 상속을 받지 않으면 Object클래스를 상속받는다.
7. 상위클래스의 생서자 호출 : super(); 키워드 
(생성자 안에서만 사용가능, 그어떤 명령보다 먼저 선행 되어야한다.)
8. 상위클래스는 서브클래스에 접근할 수 없다.

[출처] 자바[JAVA] 상속 5/12|작성자 Yellow9

  

Comment +0