데이터 구조 배열이 갖는 문제점
크기를 미리 알아야 함
배열 내의 한 요소의 입력은 모든 다른 배열 요소를 한 자리씩 이동해야 한다. (메모리 내에서 일정 간격으로 떨어져 있으므로)
대안 - 각 노드가 다른 노드를 가리키는 하나의 포인터를 가지고 그것으로 이용하는 방법
class Node{
// 자료를 저장하는 데이터 필드와 다음 노드를 가리키는 포인터를 제공해야 한다.
pubilc:
Node(){ //(1) 생성자 : next 포인터를 NULL로 초기화해주고
next=NULL;
}
Node(int value, IntNode *p =NULL){//(2) 생성자 : data 멤버를 value로 초기화하고 next 멤버를 다시 NULL로 초기화한다.
data= value;
next=p;
}
int data;
Node *next; // 이 노드에는 한 가지의 데이터 값과 다음 노드를 가리킬 수 있는 포인터가 있다.
};
노드는 두 데이터 멤버로서 data와 next를 가진다
노드의 정의는 두 생성자를 포함한다.
첫째 생성자는 next포인터를 널로 초기화하고 data값은 초기화하지 않은 채로 둔다.
두번째 생성자는 두 인수를 가지며 data멤버와 next멤버를 초기화한다,
(두번째 생성자에서는 오직 수치 인수값만 사용자가 제공)
Node *p =new Node(value) 이것은 리스트의 첫 노드를 만들고 이 노드를 가리키는 포인터로 변수 p를 정의 한다.
1. 새로운 노드를 생성
2. 이 노드의 data멤버는 (int 형) 값을 가진다 (생성자를 이용하여 새로운 값을 노드의 data에 넣는다.)
3 이 노드의 next포인터가 널을 가진다. (널을 그 다음 next 멤버에 넣는다.)
4 p를 새로 생성된 노드를 가리키는 포인터로 만든다. (첫 노드의 next멤버에 새로운 노드의 포인터를 넣음으로써 리스트에 새로운 노드를 삽입)
p->next = new Node( ); // 새로운 노드가 계속해서 이어지는 과정
p->next->next = new Node( );
p->next->next->next··· = new Node( );
자료가 많으면 한없이 길어지게 된다. 해결 방안 ☞ 연결리스트를 가리키는 두가지 포인터를 항상 유지
Node* head, tail; //첫노드와 마지막 노드를 가리키는 포인터 설정
이것을 이용하는 방법은 다음과 같다.
두클래스를 사용하여
하나는 리스트의 노드들을 위한 Node를 만들고
다른 하나는 엑세스를 위한 NodeAccess이다.
'Programming > 자료구조' 카테고리의 다른 글
이중 링크드 리스트 연습 (0) | 2018.06.05 |
---|---|
링크드 리스트 (싱글) STACK (0) | 2018.06.05 |
배열 리스트 생성 #2 (0) | 2018.06.05 |
배열 리스트 생성 #1 (0) | 2018.06.05 |
스택(문자열 배열 클래스) (0) | 2018.06.05 |