Soft Ware/자료구조 및 알고리즘

연결리스트 한번 공부해보자!!!

달려가보자 2011. 8. 8. 21:40



#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>

typedef struct Book
{
 struct Book *before_node;
 int book_num;
 struct Book *after_node;
}Book;

Book * create(int Data)
{
 Book * b_node = NULL;
 b_node = (Book *)malloc(sizeof(*b_node));
 b_node->book_num = Data;
 b_node->before_node = NULL;
 b_node->after_node = NULL;

 return b_node;
}

int Add(Book ** Head, Book * Node)
{
 if(*Head == NULL) *Head = Node;
 else
 {
  Book * H_node = *Head;

  for(;H_node->after_node != NULL; H_node = H_node->after_node);
  H_node->after_node = Node;
  Node->before_node = H_node;
 }
}

연결리스트의 팁은 항상 Head는 변하면 안된다 그럼으로 항상 Head를 인자로 넘겨주고

그 인자값의 주소를 새로운 구도체를 선언해서 받은뒤 그 구도체 변수를 이용해서 사용한다!!!

정말 중요한 팁이다 !!!

이 소스는 이중 연결 리스트 의 생성과 연결하는 부분이다. 삽입을 한다면 head값을넘겨주고

그 값이 NULL이 아닐때 까지 돌리고 그 after의 주소를 새로 삽입할 주소를 넘겨주고

새로운 삽입할 주소의 before값에 기존의 주소를 넣어주자 그러면 연결 끝!!!