출력 결과:




출력 결과:







'Programming > 자료구조' 카테고리의 다른 글

이중 링크드 리스트 연습  (0) 2018.06.05
링크드 리스트 : 클래스와 메서드 정의  (0) 2018.06.05
배열 리스트 생성 #2  (0) 2018.06.05
배열 리스트 생성 #1  (0) 2018.06.05
스택(문자열 배열 클래스)  (0) 2018.06.05

데이터 구조 배열이 갖는 문제점

  1. 크기를 미리 알아야 함

  2. 배열 내의 한 요소의 입력은 모든 다른 배열 요소를 한 자리씩 이동해야 한다. (메모리 내에서 일정 간격으로 떨어져 있으므로)

대안 - 각 노드가 다른 노드를 가리키는 하나의 포인터를 가지고 그것으로 이용하는 방법

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

리스트 구조 생성 

자료 추가 

이후에 자료를 추가하기 위해서는 다음 3종류의 파라미터 를 갖는 함수가 필요하다.. 

  1.  list 리스트를 가리키는 포인터 
  2.  position 위치 
  3.  data 값 ( 여기선 int 형과 char 형 두개)


리스트 구현 과정에 필요 항목

  • 자료구조인 리스트를 만든다. (리스트 생성)
  • 여기에 새로운 자료를 추가하는 연산 (자료추가)
  • 리스트에 저장된 자료에 접근하는 함수 (자료 반환)
  • 기존에 저장된 자료를 제거하는 함수 (자료 제거)
리스트가 제공해야 하는 이러한 기능을 정리한 리스트의 추상 자료형에 대해 알아보자

 이름

입력 

 출력

 

 리스트 생성

 create_List()

 

 list

 빈 list 생성

 자료추가

 addList_data()

list

data

position

 성공/실패

 position 에 data 추가

 자료 반환

 getList_data()

 list

position

 자료

 자료 반환

 자료개수 반환

 getList_len()

 list

 자료개수

 자료개수 반환

 자료제거

 remove_ListData()

 list

position

 성공/실패

 position에 자료제거

 모든자료제거(리스트초기화)

 clearList()

 list

 N/A

 list의 모든자료 제거

 리스트 삭제

 deleteList()

 list

 N/A

 list의 모든 자료제거 

메모리해제

리스트를 생성하고 자료를 추가하기 위해서는 먼저 두개의 기본 구조체가 필요하다.
하나는 특정 data값에 해당하는 자료형을 가지고 있는 구조체 ,
그 다음으로 그 구조체 자료형을 이용해 리스트로 활용하기 위한
전체 사이즈와 위치 값 그리고  첫번째 구조체를 가리키는 포인터 멤버변수를
포함하는 구조체이다.
이어서 리스트를 생성하고 자료를 추가해보자--->>

'Programming > 자료구조' 카테고리의 다른 글

이중 링크드 리스트 연습  (0) 2018.06.05
링크드 리스트 (싱글) STACK  (0) 2018.06.05
링크드 리스트 : 클래스와 메서드 정의  (0) 2018.06.05
배열 리스트 생성 #2  (0) 2018.06.05
배열 리스트 생성 #1  (0) 2018.06.05

+ Recent posts