728x90
링크드 리스트는 구조체나 배열처럼 C++에서 제공하는 기능이아니다.

 

그렇기 때문에 직접 만들어서 사용해야 하는데,반적으로 조체와 포인터를 사용해서 만들 수 있다.

 

예를들어 우리가 1,2,3,4라는 4개의 데이터를 보관해야 한다고 생각했을때

 
이 4개의 데이터가 배열에 보관된 모습과 링크드 리스트에 보관된 모습을 비교해보자.

 

// 배열
arr : | a | b | c | d |
사용자는 배열의 시작주소(arr = &arr[0])만 보관하고 있으면 된다.

// 링크드 리스트
a -> b -> c -> d
사용자는 첫번째 노드(a)의 위치만 보관하고 있으면 된다. 

 

배열은 차례대로 위치한 공간에 a ,b, c, d를 포함하고 있다.

 

링크드 리스트는 a, b, c, d를 담은 공간이 차례대로 위치하지는 않는다.
대신에 a는 b와 연결되고, b는 c와 연결되고, c는 d와 연결되는 방식으로 전체 아이템들을 보관한다.
이름처럼 연결된 리스트이다.

위의 배열 링크드 리스트를 보면

 

배열의 경우 3에 접근을 하기 위해서는 *(arr+2), arr[2] 등과 같이 한번에 접근이 가능
하다.

 

하지만 링크드 리스트는 c가 있는 곳까지 가려면 a,b를 거쳐야 한다.

이렇게 구성된 상태에서 사용자가 배열과 링크드리스트를 사용하는 시나리오를 생각해보자.

 

배열은 각 원소들이 차례대로 줄지어서 위치하기 때문에 이렇게 단순한 덧셈을 통해 원소에 접근이 가능하다.

 

하지만 링크드리스트배열처럼 차례대로 위치한것이 아니기 때문에 첫번째 노드부터 하나씩
거쳐가면서 c을 보관한 곳을 찾아가야 한다. 

 

구체적으로 말하면 일단 첫번째노드(a)에 접근해서 두번째 노드(b)의 위치를 알아내고, 다시 두번째 노드(b)에 접근한뒤

다음엔 세번째 노드(c)의 위치를 알아낼 수 있다. 결국 c를 보관한 노드에 접근할수 있게되는 식이다.

 

여기까지만 보았을때는 배열이 훨신 좋다.

 

어떤 원소에 접근하려고 할때 배열은 덧셈 한번만 하면 끝나지만, 링크드리스트는 첫번째 노드부터 원하는 노드에 이르기까지

모든 노드를 한번씩 거쳐야 하기 때문이다.

하지만 링크드리스트의 진정한 강점은 노드의 삽입과 삭제가 훨씬 간단하다는 점이다.

 

우선 배열과 링크드리스트에 e라는 데이터를 보관할 새로운 공간을 추가하는 시나리오를 생각해보자
이는 두가지로 나누어 볼수 있는데 배열이나 링크드 리스트의 중간에 삽입하는 경우와 끝에 삽입하는 경우가 있다.

 

※원소와 노드

- 배열에서 a,b,c,d를 보관하는 공간을 원소(Elements)라고 부른다.
비슷하게 링크드 리스트에서 a,b,c,d를 보관하는 공간을 노드(Nodes)라고 부른다.

 


// 배열
arr : | a | b | c | d | e

 

배열이 원소 5개를 보관할 수 있을만큼 크게 정의됐다는 가정하에서 끝에 e를 추가할수있다.


 

// 링크드 리스트
a -- b -- c -- d
e를 보관할 노드를 만들어서 d의 노드와 연결시키면 된다.

 

배열의 끝에 e를 포함하는 원소를 추가하려면 처음 배열을 만들 때부터 충분한 크기의 공간을 만들어야 한다.
만약 원소 4개짜리 배열이었다면 실행중에 새로운 원소를 추가하는 것은 불가능하다.

하지만 링크드리스트 경우에는 e를 포함하는 새로운 노드를 만들고, 마지막 노드와 새로운 노드를 연결시켜주면 끝난다.

 

 

이번에는 배열이나 링크드 리스트 중간에 새로운 정보를 삽입하는 시나리오를 보자.

 

우선 배열의 경우 e라는 값을 a와 b사이에 삽입하려면 b~d까지의 원소를 뒤로 한칸씩 밀어내야 한다.

그다음에 기존에 b가 있던 위치를 e에 넣으면 된다. 만약 10000개쯤있는 배열이라면 9999개의 원소를 밀어내야한다.

 

반면 링크드리스트 a와 b의 연결을 끊은 후에 a와 e, e와 b를 연결시키면 간단하게 끝난다. 

그 뒤에 9999개의 노드가 있더라도 똑같다.

이런식으로 비교를 해봤을때 삽입삭제 면에서는 링크드리스트가 훨씬 압승이라는 점을 느꼈을 것이다.

 

 

728x90
Posted by 정망스
,
728x90

요즘은 학원을 다니며 c++을 본격적으로 배우고있다.

자바나, 다른 웹언어를 더 많이 공부한 나로썬 종종 잘이해가 안가거나(본래 이해력이 많이 부족...)

멈칫 멈칫 거릴때가 너무 많다; 서론은 여기까지고..


특히 요새 애먹고 있는부분이 이 포인터 부분이다.


아직까지도 완벽히 다 이해한건 아니지만 요즘들어 배열과, 포인터를 많이 쓰던도중 


이번 글의 제목과 같이 "포인터배열", "배열포인터" 앞뒤 순서가 바뀐 이 둘의 차이가 궁금해졌고..

나 자신에게 이런거같다라고 정의를 하고 글에 끄적끄적 적어본다... (뭐 틀릴수도 있음... 양해바람)


(포인터)(배열) = 포인터배열포인터로 이루어진 배열이라는 뜻

(배열)(포인터) = 배열포인터는 배열을 가리키는 포인터라는 뜻으로 보면 될듯하다.


그렇다면 이제 간단한 코드로 한번 보자.


ex)포인터배열


char a[10] -> char형 변수 word[0],word[1].... word[9] 총 10개의 변수를 선언한것이다.


char* str[10] -> char형 포인터 변수 *str[0], *str[1]..... *str[9] 총 10개의 포인터 변수를 선언한것이다.

여기서 *str[10]을 포인터배열이라고 한다.



ex)배열포인터


char a; -> a는 char형 변수

char a[10]; -> a[10]은 char형 배열


char a[10];

char *str = a; -> a[10]은 char형 배열이고, *str은 a라는 배열을 가리키는 포인터이다.

여기서 *str을 배열포인터라고 한다.


!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

2차원 배열을 배열포인터로 가리킬때는 선언방식이 조금 다르다고 한다.


char a[5][10];

char (*str)[10];

str = a;


2차원 배열을 가리키는 배열포인터는 반드시 배열의 크기를 맞춰줘야 한다고 한다.

이유는 포인터가 가리키는 현재 칸에서 다음칸으로 이동하는데 있어서 실제 배열을 이동하는것과 동일하게 이동

해야 하기 때문이라 한다.


ex) str = a[0], str+1 = a[1], ....... str+4 = a[4]




728x90
Posted by 정망스
,
728x90

jQuery를 사용해 배열을 관리할 때는 each() 메서드를 사용합니다.

each() 메서드는 매개 변수로 입력한 함수를 사용해 for in 반복문 처럼 객체나 배열의 요소를 검사하는 메서드 입니다.

 

each() 메서드는 다음과 같이 두 가지 형태를 갖습니다.

 

1. $.each(object, function(index, item){ })

2. $(selector).each(function(index, item){ })

 

 

 

$.each() 메서드의 첫번째 매개 변수 index는 배열의 인덱스 또는 객체의 키를 의미하며

매개 변수 item은 해당 인덱스나 키가 가진 값을 의미 합니다.

 

 

 

 

$() 메서드를 사용해 h1 객체를 선택하였고 addClass 클래스를 이용하여 문서 객체에 class 속성을 추가 합니다.

 

일반적으로 매개 변수 item을 사용할 수도 있지만, this 키워드도 많이 사용됩니다. this키워드와 item은 의미가 같습니다.

728x90
Posted by 정망스
,

배열의 선언 방법

JAVA 2012. 7. 16. 16:11
728x90

아직까지 코드를 짜면서 종종 배열 선언법에 대해서 햇갈려 한다 ... 내가 멍청한건지 ...

참고 하세욤...

 

배열의 선언 1

 

 

int a[] = {1, 2, 3};

배열의 자료형과 이름을 선언하고 배열의 원소 할당을 함께 처리하는 선언 방법

배열의 선언 2

 

int [] a;

a = new int[3];

a[0]=1; a[1]=2; a[2]=3;

배열의 이름과 크기를 따로 지정하고 배열 원소도 따로 따로 저정하는 방법

배열의 선언 3

 

 

int[] a = new int[3];

배열의 이름과 크기를 동시에 저장하는 방법

 

728x90

'JAVA' 카테고리의 다른 글

JSON 형식 맛보기 ...  (0) 2012.07.19
JSON 형식(JavaScript Object Notation)  (0) 2012.07.19
jsoup parsing(파싱)  (0) 2012.07.19
자바에서의 scanf 방법 (입력 받는 방법)  (0) 2012.07.16
Jericho parsing ( 제리코 파싱 )  (0) 2012.07.13
Posted by 정망스
,


맨 위로
홈으로 ▲위로 ▼아래로 ♥댓글쓰기 새로고침