728x90
단일 연결리스트는 하나의 노드에 next가 다음노드의 주소를 가리키며 쭉 연결되어있는 리스트를
단일 연결리스트라고 하였습니다.
그렇다면 이중연결리스트는?
이중연결리스트는 말 그대로 모든 노드가 이전노드와 다음노드 에 대한 주소를 모두 저장학고있는 리스트를 의미합니다.
이중연결리스트는 단일연결리스트보다 약간의 메모리를 더 차지하긴 하겠지만 양방향 이동이 가능하기 때문에 리스트 삽입,삭제,추가 등을 할때 더욱 편리합니다.
아래 사진을통해 간단하게 정리되어있길래 가져와봤습니다! 참고)movahws.tistory.com/113
#include <stdio.h>
#include <stdlib.h>
struct NODE //구조체 선언
{
struct NODE* llink;
int data;
struct NODE* rlink;
};
struct NODE* head;
struct NODE* tail;
//노드 생성 함수
struct NODE* makenode(int value){
struct NODE *node = (struct NODE*)malloc(sizeof(struct NODE));
node->llink = NULL;
node->data = value;
node->rlink = NULL;
return node;
}
//출력 함수
void print(){
struct NODE *p;
p = head;
while(p->rlink != tail){
printf("%d-->",p->data);
p = p->rlink;
}
printf("%d",p->data);
}
//초기화 함수
void init(){
head = (struct NODE*)malloc(sizeof(struct NODE));
tail = (struct NODE*)malloc(sizeof(struct NODE));
head->data = 0;
tail->data = 0;
head->rlink = tail;
head->llink = head;
tail->rlink = tail;
tail->llink = head;
}
//뒤로부터 노드 추가하는 함수
void push_back(int value){
struct NODE* newnode = makenode(value);
struct NODE* p;
p = tail;
p->llink->rlink = newnode;
newnode->llink = p->llink;
p->llink = newnode;
newnode->rlink = p;
}
//main함수
int main(){
init(); //head와 tail 초기화 (data = 0)
push_back(10); //10 추가
push_back(30); //30 추가
push_back(50); //50 추가
print(); //출력
return 0;
}
728x90
'자료구조' 카테고리의 다른 글
C언어 배열(array) vs 연결리스트(linked list) (feat.동적메모리 할당의 장점) - 1/2 (0) | 2021.04.16 |
---|---|
[자료구조] C 이중연결리스트 예제문제 , 이중연결리스트 노드추가 , 노드삭제 , 노드삽입, 노드입력 (0) | 2020.12.04 |
[자료구조] C 단일연결리스트 예제) 학생정보리스트 노드입력, 노드삭제,노드검색,노드출력 (0) | 2020.12.03 |
[자료구조] C 연결리스트 마지막 리스트에 노드 붙이기 (0) | 2020.12.03 |
[자료구조 기초] 연결리스트2 노드추가함수 코드 (0) | 2020.11.27 |