티스토리 뷰

C/자료구조

이중 연결 리스트

NationCore 2019. 3. 13. 17:30

#include <stdio.h>

#include <stdlib.h>


typedef struct Dlist_node {

int data;

struct Dlist_node *llink;

struct Dlist_node *rlink;

}Dlist_node;  


// 포인터에서 포인터의주소 그 포인터의 주소를 불러들일려면 struct Dlist_node를 전반에 후반에 둘다 선언해줘야된다.


void init(Dlist_node *head)

{

head->llink = head;

head->rlink = head;

}


void before_right_node(Dlist_node *before, Dlist_node *new_node)

{

new_node->llink = before; // 새로운 노드의 왼쪽은 before 노드로

new_node->rlink = before->rlink; // 새로운 노드의 오른쪽은 before의 오른노드로

before->rlink->llink = new_node; // before노드의 다음 스테이지의 왼쪽을 new_node를 가르킴

before->rlink = new_node; //  before의 오른쪽을 new_node를 가르킴

}


void remove_node(Dlist_node *head_node, Dlist_node *removed)

{

if (removed == head_node) return;

removed->llink->rlink = removed->rlink;

removed->rlink->llink = removed->llink; // 이중구조이기에 두 개삭제

free(removed);

}


void display(Dlist_node *head)

{

Dlist_node *p;

for (p = head->rlink;p != head;p = p->rlink)

{

printf("---------| %x | %d | %x |-----------\n",p->llink,p->data,p->rlink);

printf("\n");

}



void main(void)

{

Dlist_node head_node;

Dlist_node *p[10];

int i;

init(&head_node);

for (i = 0; i < 5; i++)

{

p[i] = (Dlist_node *)malloc(sizeof(Dlist_node));

p[i]->data = i;


before_right_node(&head_node, p[i]);

}

remove_node(&head_node, p[4]);

display(&head_node);

}



결과 : 


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

주소 포인터를 이용한 다항식 계산  (0) 2019.03.18
원형 리스트  (0) 2019.03.13
자체 참조 구조체를 이용한 동적 리스트  (0) 2019.03.13
배열을 이용한 리스트  (0) 2019.03.13
자체 참조 구조체  (0) 2019.03.11
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2026/01   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함