티스토리 뷰
#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 |
