728x90
#include stdio.h>
#include stdlib.h>
#define CLS system("cls")
#define PAUSE system("pause")
#define SAFE_FREE(a) if(a){free(a); a=NULL;}
#define MALLOC (Node *)malloc(sizeof(Node))
#define ALL 0
#define ONE 1
typedef struct _Node
{
int m_nData;
struct _Node *m_pNext;
}Node;
void LinkedList_DisplayNode (Node *pHead, int nCase);
void LinkedList_AddNode (Node **ppHead, int nData);
void LinkedList_InsertNode (Node **ppHead, int nData, int nPosition);
void LinkedList_RemoveNode(Node **ppHead, int nData);
void LinkedList_RemoveAllNode(Node **ppHead);
void LinkedList_SearchNode(Node *pHead, int nData);
int main(void)
{
int nSelect = 0;
int nTemp = 0;
int nPosition = 0;
Node *pHead = NULL;
while(1)
{
CLS;
printf("\n __________________________________\n");
printf(" |________ Linked List TEST _______|\n");
printf(" | Select >>>> 1. Add |\n");
printf(" | >>>> 2. Insert |\n");
printf(" | >>>> 3. Search |\n");
printf(" | >>>> 4. Remove |\n");
printf(" | >>>> 5. Remove All |\n");
printf(" | >>>> 6. Print |\n");
printf(" | >>>> 0. Exit |\n");
printf(" |_________________________________|\n");
printf(" Enter a select Number : ");
scanf("%d", &nSelect);
if(nSelect == 0)
{
CLS;
printf("\n ______________________________\n");
printf(" Exit Linked List TEST \n");
printf(" ______________________________\n");
LinkedList_RemoveAllNode(&pHead);
return;
}
else if(nSelect == 1)
{
CLS;
printf("\n ______________________________\n");
printf(" Add Linked List TEST\n");
printf(" ______________________________\n");
printf(" Enter a input Data : ");
scanf("%d", &nTemp);
LinkedList_AddNode(&pHead, nTemp);
PAUSE;
}
else if(nSelect == 2)
{
CLS;
printf("\n ______________________________\n");
printf(" Insert Linked List TEST\n");
printf(" ______________________________\n");
printf(" Enter a input Data : ");
scanf("%d", &nTemp);
printf(" Enter a taget Node : ");
scanf("%d", &nPosition);
LinkedList_InsertNode(&pHead, nTemp, nPosition);
PAUSE;
}
else if(nSelect == 3)
{
CLS;
printf("\n ______________________________\n");
printf(" Search Linked List TEST\n");
printf(" ______________________________\n");
printf(" Enter a search Data : ");
scanf("%d", &nTemp);
LinkedList_SearchNode(pHead, nTemp);
PAUSE;
}
else if(nSelect == 4)
{
CLS;
printf("\n ______________________________\n");
printf(" Remove Linked List TEST\n");
printf(" ______________________________\n");
printf(" Enter a remove Data : ");
scanf("%d", &nTemp);
LinkedList_RemoveNode(&pHead, nTemp);
PAUSE;
}
else if(nSelect == 5)
{
CLS;
printf("\n ______________________________\n");
printf(" Remove All Linked List TEST\n");
printf(" ______________________________\n");
LinkedList_RemoveAllNode(&pHead);
printf(" Remove All SUCCESS!!\n");
PAUSE;
}
else if(nSelect == 6)
{
CLS;
printf("\n ______________________________\n");
printf(" Display Linked List TEST\n");
printf(" ______________________________\n");
LinkedList_DisplayNode(pHead, ALL);
PAUSE;
}
}
return;
}
void LinkedList_DisplayNode (Node *pHead, int nCase)
{
Node *pTemp = NULL;
pTemp = pHead;
switch(nCase)
{
case 0: // 전체 노드 출력
while(pTemp != NULL)
{
printf("\n ______________________________\n");
printf(" LinkedList Data : %d\n", pTemp->m_nData);
printf(" LinkedList Next : %x\n", pTemp->m_pNext);
pTemp = pTemp->m_pNext;
}
printf(" ______________________________\n");
break;
case 1: // 한 노드만 출력
printf("\n ______________________________\n");
printf(" LinkedList Data : %d\n", pTemp->m_nData);
printf(" LinkedList Next : %x\n", pTemp->m_pNext);
printf(" ______________________________\n");
break;
}
}
void LinkedList_AddNode (Node ** ppHead, int nData)
{
Node *pTemp = NULL;
Node *pSearch = NULL;
pTemp = MALLOC;
if(pTemp == NULL)
{
printf(" Malloc is failed!!\n");
return;
}
pTemp->m_nData = nData;
pTemp->m_pNext = NULL;
//노드가 생성되지 않은 경우
if(*ppHead == NULL)
{
*ppHead = pTemp;
LinkedList_DisplayNode(*ppHead, ONE);
}
//노드가 1 이상 존재하는 경우
else
{
pSearch = *ppHead;
//마지막 노드 검색
while(pSearch->m_pNext != NULL)
{
pSearch = pSearch->m_pNext;
}
//마지막 노드 다음에 노드 추가
pSearch->m_pNext = pTemp;
//추가 된 노드 정보 출력
pSearch = pSearch->m_pNext;
LinkedList_DisplayNode(pSearch, ONE);
}
}
void LinkedList_InsertNode (Node **ppHead, int nData, int nPosition)
{
Node *pTemp = NULL;
Node *pTarget = NULL;
pTemp = MALLOC;
if(pTemp == NULL)
{
printf(" Malloc is failed!!\n");
return;
}
pTemp->m_nData = nData;
pTemp->m_pNext = NULL;
if(*ppHead == NULL)
{
*ppHead = pTemp;
LinkedList_DisplayNode(*ppHead, ONE);
}
else
{
pTarget = *ppHead;
//노드 검색
while(pTarget != NULL && (pTarget->m_nData != nPosition))
{
pTarget = pTarget->m_pNext;
}
//노드를 찾은 경우
if(pTarget != NULL)
{
//해당 노드 뒤에 노드 추가
pTemp->m_pNext = pTarget->m_pNext;
pTarget->m_pNext = pTemp;
LinkedList_DisplayNode(pTemp, ONE);
}
//노드를 찾지 못한 경우
else
{
printf("\n Not Find!!\n");
SAFE_FREE(pTarget);
SAFE_FREE(pTemp);
}
}
}
void LinkedList_RemoveNode(Node **ppHead, int nData)
{
Node *pTemp = NULL;
Node *pTarget = NULL;
pTemp = *ppHead;
pTarget = *ppHead;
//노드 검색
while(pTemp != NULL && (pTemp->m_nData != nData))
{
pTarget = pTemp;
pTemp = pTemp->m_pNext;
}
//노드를 찾은 경우
if(pTemp != NULL)
{
if(pTemp == pTarget)
{
printf("\n Remove object is Head!!\n");
printf("\n Remove SUCCESS!!\n");
*ppHead = (*ppHead)->m_pNext;
SAFE_FREE(pTemp);
}
else
{
pTarget->m_pNext = pTemp->m_pNext;
SAFE_FREE(pTemp);
printf("\n Remove SUCCESS!!\n");
}
}
//노드를 찾지 못한 경우
else
{
printf("\n Not Find!!\n");
SAFE_FREE(pTemp);
}
}
void LinkedList_RemoveAllNode(Node **ppHead)
{
Node *pTemp = NULL;
Node *pDelete = NULL;
pTemp = *ppHead;
while(pTemp != NULL)
{
pDelete = pTemp;
pTemp = pTemp->m_pNext;
SAFE_FREE(pDelete);
}
(*ppHead) = NULL;
}
void LinkedList_SearchNode(Node *pHead, int nData)
{
Node *pTemp = NULL;
pTemp = pHead;
//노드 검색
while(pTemp != NULL && (pTemp->m_nData != nData))
{
pTemp = pTemp->m_pNext;
}
//노드를 찾은 경우
if(pTemp != NULL)
{
printf("\n Find SUCCESS!!\n");
LinkedList_DisplayNode(pTemp, ONE);
}
//노드를 찾지 못한 경우
else
{
printf("\n Not Find!!\n");
}
}
728x90
'Programing > C Language' 카테고리의 다른 글
| ASCII 코드표(아스키코드표) (0) | 2014.01.21 |
|---|---|
| 구구단 최적화 코딩 (0) | 2014.01.21 |
| 이중 연결 리스트(Double Linked List) (0) | 2014.01.21 |
| 이중 연결 리스트 + 이진 트리(Double Linked List + Binary Tree) (0) | 2014.01.20 |
| File RW (파일 읽고 쓰기) (0) | 2014.01.20 |