컴공 일기92
게시글 주소: https://dev.orbi.kr/00057341390
단방향 리스트 구현 예제입니다.
#include <stdio.h>
#include <stdlib.h>
struct Node
{
int Data;
struct Node* NextNode;
//단방향 연결 리스트
};
//노드 생성
Node* SLL_CreateNode(int NewData)
{
Node* NewNode = (Node*)malloc(sizeof(Node));
NewNode->Data = NewData;
NewNode->NextNode = NULL;
return NewNode;
}
//노드 메모리 해제
void SLL_DestroyNode(Node* Node)
{
free(Node);
}
//노드 추가
void SLL_AppendNode(Node** Head, Node* NewNode)
{
if ((*Head) == NULL)
{
*Head = NewNode;
}
else
{
Node* Tail = *Head;
while (Tail->NextNode != NULL)
{
Tail = Tail->NextNode;
}
Tail->NextNode = NewNode;
}
}
//노드 탐색
Node* SLL_GetNodeAt(Node* Head, int Location)
{
Node* Current = Head;
while (Current != NULL && (--Location) >= 0)
{
Current = Current->NextNode;
}
return Current;
}
//노드 삭제
void SLL_RemoveNode(Node** Head, Node* Remove)
{
if (*Head == Remove)
{
*Head = Remove->NextNode;
}
else {
Node* Current = *Head;
while (Current != NULL && Current->NextNode != Remove)
{
Current = Current->NextNode;
}
if (Current != NULL)
Current->NextNode = Remove->NextNode;
}
}
//노드 정방향 삽입
void SLL_InsertAfter(Node* Current, Node* NewNode)
{
NewNode->NextNode = Current->NextNode;
Current->NextNode = NewNode;
}
//헤드 노드 정방향 삽입
void SLL_InsertNewHead(Node** Head, Node* NewHead)
{
if (*Head == NULL)
{
(*Head) = NewHead;
}
else
{
NewHead->NextNode = (*Head);
(*Head) = NewHead;
}
}
//노드 개수 세기
int SLL_GetNodeCount(Node* Head)
{
int Count = 0;
Node* Current = Head;
while (Current != NULL)
{
Current = Current->NextNode;
Count++;
}
return Count;
}
int main()
{
int i = 0;
int Count = 0;
Node* List = NULL;
Node* Current = NULL;
Node* NewNode = NULL;
for (i = 0; i < 5; i++)
{
NewNode = SLL_CreateNode(i);
SLL_AppendNode(&List, NewNode);
}
NewNode = SLL_CreateNode(-1);
SLL_InsertNewHead(&List, NewNode);
NewNode = SLL_CreateNode(-2);
SLL_InsertNewHead(&List, NewNode);
Count = SLL_GetNodeCount(List);
for (i = 0; i < Count; i++)
{
Current = SLL_GetNodeAt(List, i);
printf("List[%d] : %d\n", i, Current->Data);
}
}
실행결과 :
List[0] : -2
List[1] : -1
List[2] : 0
List[3] : 1
List[4] : 2
List[5] : 3
List[6] : 4
0 XDK (+0)
유익한 글을 읽었다면 작성자에게 XDK를 선물하세요.


이번 한 주도 파이팅이에요방학때도 공부를...
아무래도 컴공의 숙명이죠... ㅜㅠ
ㅠㅠㅠㅠ그래도...
키키 그래두 열심히 살구 있죵 ㅎㅅㅎ 종강은 잘 하셨어용?