목록연결 리스트 (4)
나무 숲
이중 연결 리스트 Double Linked List 이중 연결 리스트입니다. 일반 연결 리스트와 다르게 한 노드를 기준으로 그 전 노드를 가리키는 before, 그 다음 노드를 가리키는 next 포인터가 존재합니다. 첫 번째 데이터가 tail에 삽입된 모습입니다. 노드가 하나뿐이라 head=tail=뉴노드 입니다. 뉴노드를 삽입하는 모습입니다. 뉴노드의 next은 (헌)노드, (헌)노드의 before는 뉴노드 입니다. 이후 뉴노드는 tail이 됩니다. head는 그대로인 모습입니다. 노드를 삭제하는 모습입니다. 더미노드를 만들어 삭제할 부분인 tail를 가리키게 합니다. tail는 tail->before을 가리킵니다. 삭제될 노드를 가리키는 tail->next는 NULL이 됩니다 더미노드의 메모리를 해제..
* 열혈강의 자료구조 책 + 인터넷 + a 원형 연결 리스트 Circular Linked List 원형 연결 리스트입니다.그림처럼 하나로 쭉 이어지며, tail이 별도로, 반드시 필요하지는 않습니다.head와 tail을 구분지어서 tail과 tail->next(head)로 사용하는 경우도 있습니다.저는 구분짓지 않고 head만을 사용하였습니다. (따라서 마치 tail과도 같은 역할을 수행하게 되었습니다..) 리스트가 텅 빈 상태에서 뉴노드를 넣게 되면 보여지는 모습입니다 노드가 하나 이상일 때 노드를 추가하면 나타나는 모습입니다.이러한 구조 때문에 head부터 리스트의 데이터들을 출력하면 생각하던 결과와 다소 다른 값이 출력됩니다.출력값은 아래 스크린샷에 있습니다. (1에서 5.. 순서대로 출력하려면 h..
* 열혈강의 자료구조 책 + 인터넷 + a 연결 리스트란? (메모리의 동적 할당) 메모리의 동적 할당, 즉 malloc와 free를 이용한 연결 리스트의 핵심 중 하나는 바로 아래 코드입니다 #include using namespace std; typedef struct _Node{ int data; struct _Node *next; } Node; Node 구조체입니다. 여기서 Node란, data, 즉 어떤 값을 가지고 있으며, 동시에 Node형 구조체 변수의 주소 값을 저장할 수 있는 포인터 변수를 포함합니다. (책에서는 바구니에 비유) 더 단순하게 이해해보자면 Node의 값은 data, 그리고 다음 Node의 주소는 next에 있다. 즉 data라는 값을 가진 노드 하나는 next 노드를 가리킨다..
* 열혈강의 자료구조 책 + 인터넷 + a책이 정말 너무 잘 되어있지만 여기엔 간단하게 씀 + 내상각 추가 순차 리스트 (배열 기반) 순차적으로 접근할 수 있는, 구조체와 배열을 이용한 연결 리스트이다. 1. 배열 기반의 구조체 정의 typedef struct _ArrayList{ int arr[100]; int numOfData; //데이터의 개수 int curPosition; //배열의 인덱스 값 저장 } List; //구조체 이름을 List로 정의 2. 구조체 기반 함수 정의(기능 위주)void ListInit(List *list){ //리스트 초기화 list->numOfData = 0; //리스트에 저장된 내용이 없다 list->curPosition = -1; //아무것도 저장하지 않음을 의미 }..