쉬어가기 - 단일 연결 리스트

2009. 8. 3. 20:56언어/C Lang


연결리스트의 대체 자료구조 => 배열이 아니라 동적배열!
연결리스트의 요소인 노드는 데이터오ㅚ에 연결상태의 정보인 노드를 추가로 가져야 한다.

연결리스트의장점 = > 삽입 삭제를 할때도 물리적인 메모리 없이 요소간의 링크만 조작하면 되므로 속도가 빠르다.
연결리스트의 노드를 구성하는 데이터와 링크는 타입이 다르므로 이형타입의 집합인 구조체로 정의.
ex)

struct Node
{
int Value; // 데이터 = > 임의타입, 임의 개수가 가능.
node *Next; // 링크
};
시작점을 기억하는 노드 => head라 한다. (언제든지 참조할 수 있도록 전역변수로 설정)

***********************************따라하기*************************************
#include <stdio.h>
#include <stdlib.h>
#define BOOL int //C언어에서는 BOOL형이 없으므로 이와 같이 해주어야 한다.
#define TRUE 1
#define FALSE 0
//노드 구조체
struct Node
{
 int value;
 Node *next;
};
Node *head;
//연결리스트 초기화 -머리를 할당한다.
void InitList()
{
 head=(Node *)malloc(sizeof(Node));
 head->next=NULL;
}
//Target 다음에 노드를 삽입한다.
Node *InsertNode(Node *Target, Node *aNode)
{
 Node *New;
 New = (Node *)malloc(sizeof(Node));
 *New=*aNode;
 New->next=Target->next;
 Target->next=New;
 return New;
}
//target의 노드를 삭제한다.
BOOL DeleteNode(Node *Target)
{
 Node *Del;
 Del = Target->next;
 if(Del==NULL)
 {
  return FALSE;
 }
 Target->next=Del->next;
 free(Del);
}
//연결 리스트의 모든 노드와 머리를 삭제한다.
void UnInitList()
{
 while (DeleteNode(head)) {;}
 free(head);
 head=NULL;
}
void main()
{
 int i;
 Node *Now, Temp;
 InitList();
 // 다섯 개의 노드 삽입
 Now = head;
 for(i = 1; i<=5; i++)
 {
  Temp.value=i;
  Now=InsertNode(Now,&Temp);
 }
 //두 번째 노드 삭제
 DeleteNode(head->next);
 //순회하면서 출력
 for(Now=head->next; Now; Now=Now->next)
 {
  printf("%d\t", Now->value);
 }
 printf("\n");
 UnInitList();
}

끝~.

'언어 > C Lang' 카테고리의 다른 글

최대값 최소값 평균 구하기..  (0) 2009.09.16