# 단순연결리스트의 구현
SimpleLinkedList.cpp
SimpleLinkedList.cpp
Create_Node(); | 노드 생성 함수 |
Insert_Node(); | 노드 삽입 함수 |
Search_Node(); | 노드 검색 함수 |
Remove_Node(); | 노드 삭제 함수 |
Reverse(); | 노드 역순 변경 |
#include <stdio.h>
#include <stdlib.h>
typedef struct NODE
{
int data;
NODE *link;
}NODE;
pre>NODE* Create_Node(int data)
{
NODE *New_Node=(NODE*)malloc(sizeof(NODE));
if(New_Node == NULL)
{
puts("메모리 할당 에러");
exit(1);
}
New_Node->data=data;
New_Node->link=NULL;
return New_Node;
}
pre>void Insert_Node(NODE **pHead,NODE *p, NODE *New_Node)
{
if(*pHead == NULL)
{
*pHead=New_Node;
}
elseif(p == NULL)
{
New_Node->link=*pHead;
*pHead=New_Node;
}
else
{
New_Node->link=p->link;
p->link=New_Node;
}
}
pre>NODE* Search_Node(NODE *list,int data)
{
NODE *p=list;
while(p!=NULL)
{
if(p->data == data)
return p;
p=p->link;
}
return NULL;
}
pre>int Remove_Node(NODE *list,int data)
{
NODE *p=list;
NODE *remove;
while(p!=NULL)
{
if(p->link != NULL) // 삭제될 선행 노드를 찾는다.
{
if(p->link->data == data)
break;
}
p=p->link;
}
if(p!=NULL)
{
remove=p->link; // 삭제될 노드를 remove가 가리키게 한다.
p->link=remove->link;
free(remove);
return0;
}
else
return -1;
}
pre>NODE* Reverse(NODE *list)
{
NODE *p, *q, *r;
p=list; // 역순으로 만들 리스트
q=NULL; // 역순으로 만들 노드
while(p!=NULL)
{
r = q;
q = p;
p = p->link;
q->link = r;
}
return q;
}
pre>
void Display_Node(NODE *list)
{
NODE *p=list;
while(p!=NULL)
{
printf("%d-> ",p->data);
p=p->link;
}
printf("\n");
}
pre>int main()
{
NODE *list=NULL;
NODE *p=NULL;
NODE *recv_list=NULL;
Insert_Node(&list,NULL,Create_Node(10)); // 10->
Insert_Node(&list,NULL,Create_Node(20)); // 20->10
Insert_Node(&list,NULL,Create_Node(30)); // 30->20->10
Insert_Node(&list,NULL,Create_Node(40)); // 40->30->20->10
Insert_Node(&list,NULL,Create_Node(50)); // 50->40->30->20->10
pre>Display_Node(list);// 50->40->30->20->10
pre>p=Search_Node(list,10); // 데이터가 10인 노드 검색
pre>Insert_Node(&list,p,Create_Node(5)); // 검색된 p 노드 다음에 추가 pre>Display_Node(list); // 50->40->30->20->10->5
pre>Remove_Node(list,30); // 데이터가 30인 노드 삭제
pre>Display_Node(list); // 60->50->40->20->15->10->5
pre>recv_list=Reverse(list); // 연결리스트 역순
pre>Display_Node(recv_list); // 5-> 10-> 20-> 40-> 50->
pre>
return0;
}
'컴퓨터 기술 > 자료구조' 카테고리의 다른 글
자료구조 :: 스택(1) 배열을 이용한 스택 (0) | 2010.06.22 |
---|---|
자료구조 :: 리스트(5) 연결리스트를 이용한 다항식 (0) | 2010.06.22 |
자료구조 :: 리스트(4) 이중 연결리스트 (0) | 2010.06.21 |
자료구조 :: 리스트(3) 원형 연결리스트 (0) | 2010.06.21 |
자료구조 :: 리스트(2) 연결리스트 정렬 (1) | 2010.06.21 |
댓글 로드 중…