반응형

이중 연결리스트 11

[디딤돌 자료구조와 알고리즘] 5.2 연결리스트 - 5.2.2 연결리스트 구현

5.2.2 연결리스트 구현 연결리스트를 동적으로 생성하는 함수를 작성합시다. LinkedList *New_LinkedList() { LinkedList *linkedlist = 0; 먼저 LinkedList 형식 크기의 메모리를 할당합니다. linkedlist = (LinkedList *)malloc(sizeof(LinkedList)); 그리고 head와 tail에 더미 노드를 생성합니다. 노드를 생성하는 함수는 별도로 작성합시다. linkedlist->head = New_Node(0); linkedlist->tail = New_Node(0); head의 next링크를 tail을 가리키게 하고 tail의 prev 링크를 head를 가르키게 합니다. linkedlist->head->next = linked..

[디딤돌 자료구조와 알고리즘] 5.2 연결리스트 - 5.2.1 연결리스트 설계

5.2 연결리스트 연결리스트는 노드의 선형 집합입니다. 노드란 데이터와 링크의 조합으로 하나의 데이터를 보관하는 작은 저장소입니다. 그리고 링크는 노드의 위치 정보입니다. [그림 5.1] 연결리스트 연결리스트는 노드에 링크가 하나만 있는 단일(단순) 연결리스트와 링크가 두 개 있는 이중 연결리스트로 구분할 수 있습니다. 이 책에서는 노드에 이전 노드의 위치 정보를 가르키는 링크와 다음 노드의 위치 정보를 가르키는 링크를 갖고 있는 이중 연결리스트를 만들고 사용하는 방법을 소개할 것입니다. 특히 연결리스트를 생성할 때 연결리스트의 맨 앞과 맨 뒤에 더미 노드를 생성하여 자료를 보관하는 노드들을 이들 사이에 배치할게요. 5.2.1 연결리스트 설계 동적 배열처럼 연결리스트도 동적으로 생성한 개체는 형식에 관계..

[자료구조와 STL] 18. list 만들기 – 더미 노드없는 이중 연결 리스트 소스 코드

//EHList.h – 더미노드가 없는 이중 연결 리스트 #pragma once namespace EHLIB {     templatetypename T>     class list     {         struct node         {             node *prev; //이전 노드의 위치 정보             node *next; //다음 노드의 위치 정보             T data; //노드에 보관된 요소             node(T data=0):data(data) //초기화             {                 prev = next = 0;    ..

[자료구조와 STL] 17. list 만들기 – 더미 노드없는 이중 연결 리스트

3. 2 list 만들기 – 더미 노드없는 이중 연결 리스트 이번에는 더미노드가 없는 이중 연결 리스트를 만들어 봅시다. 더미노드가 없는 이중 연결 리스트에도 node의 정의나 iterator의 정의는 차이가 없습니다. 여기에서는 차이가 있는 부분만 언급하겠습니다. 먼저, list를 생성했을 때의 초기 모습이 다를 것입니다. [그림 12] 더미노드 없는 이중 연결 리스트 초기화 모습 list(){ head = tail = 0; bsize = 0;} 생성자 메서드 외에 차이가 있는 부분은 노드를 매다는 hang_node와 노드의 연결을 끊는 dehang_hode와 시작 iterator를 반환하는 begin, 마지막 iterator를 반환하는 end가 있습니다. hang_node 메서드에서는 보관된 자료가 ..

3.2.2 이중 연결리스트 만들기 [디딤돌 자료구조와 알고리즘 with C++]

3.2.2 이중 연결리스트 만들기 이번에는 노드에 링크가 두 개 있는 이중 연결리스트를 만듭시다. 그리고 연결리스트의 head와 tail이 가리키는 노드를 초기에 만들기로 할게요. 링크가 두 개 있으면 이전 노드의 위치 정보를 갖고 있으므로 삭제나 추가할 때 이전 노드의 위치를 기억하는 변수를 별도로 선언할 필요가 없습니다. 그리고 연결리스트 초기화 과정에서 head와 tail이 가리키는 각 노드를 초기에 만들면 자료를 보관하는 노드를 맨 앞이나 맨 뒤에 보관하지 않아 연산을 단순하게 표현할 수 있습니다. 이 부분은 실제 구현하면서 설명하기로 할게요. 참고로 자료를 보관할 목적이 아닌 연결리스트를 운영하기 쉽게 생성한 노드를 더미 노드(Dummy Node)라 부릅니다. 여기서 만들 이중 연결리스트는 he..

이중 연결리스트 - 정렬 상태로 보관, C언어 소스

이중 연결리스트 - 정렬 상태로 보관, C언어 소스 //이중 연결리스트 - 정렬 상태로 보관//연결리스트 정의, 노드 정의, 초기화, 추가, 삭제, 검색, 전체 출력, 해제#include #include typedef struct Node//노드 정의{ int data;//데이터 struct Node *next;//링크(다음 노드의 위치 정보) struct Node *prev;//링크(이전 노드의 위치 정보)}Node; Node *NewNode(int data){ Node *now = (Node *)malloc(sizeof(Node)); now->data = data; now->prev = now->next = NULL; return now;} typedef struct List//연결리스트 정의{ No..

이중 연결리스트 - 동적 생성한 데이터 보관, C언어 소스

이중 연결리스트 - 동적 생성한 데이터 보관, C언어 소스 //이중 연결리스트 - 동적 생성한 데이터 보관 //연결리스트 정의, 노드 정의, 초기화, 추가, 삭제, 검색, 전체 출력, 해제 #include #include #include typedef void * Element; typedef struct Node//노드 정의 { Element data;//데이터 struct Node *next;//링크(다음 노드의 위치 정보) struct Node *prev;//링크(이전 노드의 위치 정보) }Node; Node *NewNode(Element data)//노드 생성 { Node *now = (Node *)malloc(sizeof(Node)); now->data = data; now->prev = now..

이중 연결리스트 - 더미 노드 사용, C언어 소스

이중 연결리스트 - 더미 노드 사용, C언어 소스 //이중 연결리스트 - 더미 노드 사용, 순차 보관(가장 최근에 보관한 데이터가 맨 뒤)//연결리스트 정의, 노드 정의, 초기화, 추가, 삭제, 검색, 전체 출력, 해제#include #include typedef struct Node//노드 정의{ int data;//데이터 struct Node *next;//링크(다음 노드의 위치 정보) struct Node *prev;//링크(이전 노드의 위치 정보)}Node; Node *NewNode(int data){ Node *now = (Node *)malloc(sizeof(Node)); now->data = data; now->prev = now->next = NULL; return now;} typedef..

이중 연결리스트 - 순차 보관, C언어 소스

이중 연결리스트 - 순차 보관, C언어 소스 //이중 연결리스트 - 순차 보관(가장 최근에 보관한 데이터가 맨 뒤) //노드 정의, 초기화, 추가, 삭제, 검색, 전체 출력, 해제 #include #include typedef struct Node//노드 정의 { int data;//데이터 struct Node *next;//링크(다음 노드의 위치 정보) struct Node *prev;//링크(이전 노드의 위치 정보) }Node; void InitList(Node **phead, Node **ptail);//초기화 void AddData(Node **phead, Node **ptail, int data);//데이터 추가 void Remove(Node **phead, Node **ptail, Node *..

이중 연결리스트 - 역순 보관(가장 최근에 보관한 데이터가 맨 앞), C언어 소스

이중 연결리스트 - 역순 보관(가장 최근에 보관한 데이터가 맨 앞), C언어 소스 //이중 연결리스트 - 역순 보관(가장 최근에 보관한 데이터가 맨 앞)//노드 정의, 초기화, 추가, 삭제, 검색, 전체 출력, 해제#include #include typedef struct Node//노드 정의{ int data;//데이터 struct Node *next;//링크(다음 노드의 위치 정보) struct Node *prev;//링크(이전 노드의 위치 정보)}Node; void InitList(Node **phead);//초기화void AddData(Node **phead, int data);//데이터 추가void Remove(Node **phead, Node *now);//노드 삭제Node *Find(Node..

반응형