쉬어가기 - 단일 연결 리스트
2009. 8. 3. 20:56ㆍ언어/C Lang
연결리스트의 대체 자료구조 => 배열이 아니라 동적배열!
연결리스트의 요소인 노드는 데이터오ㅚ에 연결상태의 정보인 노드를 추가로 가져야 한다.
연결리스트의장점 = > 삽입 삭제를 할때도 물리적인 메모리 없이 요소간의 링크만 조작하면 되므로 속도가 빠르다.
연결리스트의 노드를 구성하는 데이터와 링크는 타입이 다르므로 이형타입의 집합인 구조체로 정의.
ex)
struct Node
{
int Value; // 데이터 = > 임의타입, 임의 개수가 가능.
node *Next; // 링크
};
시작점을 기억하는 노드 => head라 한다. (언제든지 참조할 수 있도록 전역변수로 설정)
***********************************따라하기*************************************
#include <stdio.h>
#include <stdlib.h>
시작점을 기억하는 노드 => head라 한다. (언제든지 참조할 수 있도록 전역변수로 설정)
***********************************따라하기*************************************
#include <stdio.h>
#include <stdlib.h>
#define BOOL int //C언어에서는 BOOL형이 없으므로 이와 같이 해주어야 한다.
#define TRUE 1
#define FALSE 0
#define TRUE 1
#define FALSE 0
//노드 구조체
struct Node
{
int value;
Node *next;
};
Node *head;
struct Node
{
int value;
Node *next;
};
Node *head;
//연결리스트 초기화 -머리를 할당한다.
void InitList()
{
head=(Node *)malloc(sizeof(Node));
head->next=NULL;
}
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;
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->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);
}
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)) {;}
void UnInitList()
{
while (DeleteNode(head)) {;}
free(head);
head=NULL;
}
head=NULL;
}
void main()
{
int i;
Node *Now, Temp;
{
int i;
Node *Now, Temp;
InitList();
// 다섯 개의 노드 삽입
Now = head;
for(i = 1; i<=5; i++)
{
Temp.value=i;
Now=InsertNode(Now,&Temp);
}
Now = head;
for(i = 1; i<=5; i++)
{
Temp.value=i;
Now=InsertNode(Now,&Temp);
}
//두 번째 노드 삭제
DeleteNode(head->next);
DeleteNode(head->next);
//순회하면서 출력
for(Now=head->next; Now; Now=Now->next)
{
printf("%d\t", Now->value);
}
printf("\n");
for(Now=head->next; Now; Now=Now->next)
{
printf("%d\t", Now->value);
}
printf("\n");
UnInitList();
}
끝~.
}
끝~.
'언어 > C Lang' 카테고리의 다른 글
최대값 최소값 평균 구하기.. (0) | 2009.09.16 |
---|