C언어 - 단순 연결 리스트
//단순 연결 리스트 예제
#include<stdio.h>
#include<stdlib.h>
typedef struct list_node *list_pointer; // 연결리스트 구현을 위한 자기 참조 구조체
struct list_node {
int data;
list_pointer link;
};
void print_list(list_pointer ptr); //리스트를 출력하는 함수
list_pointer create3(); //리스트의 노드를 만드는 함수
int nodesum(list_pointer ptr); //리스트의 노드 값을 더하는 함수
int nodenumber(list_pointer ptr); //리스트의 노드 숫자를 더하는 함수
void main()
{
list_pointer ptr;
ptr = create3();
print_list(ptr);
printf("list안의 node 수 : %d\n", nodenumber(ptr));
printf("list안의 data 합 : %d\n", nodesum(ptr));
}
list_pointer create3()
{
list_pointer first, second, third;
first = (list_pointer)malloc(sizeof(struct list_node)); // 구조체 메모리 할당
second = (list_pointer)malloc(sizeof(struct list_node)); // 구조체 메모리 할당
third = (list_pointer)malloc(sizeof(struct list_node)); //구조체 메모리 할당
third->link = NULL;
second->link = third;
first->link = second;
first->data = 10;
second->data = 20;
third->data = 30;
return first; //첫번째 노드의 주소값 반환
}
void print_list(list_pointer ptr)
{
printf("The list contains: ");
for (; ptr; ptr = ptr->link) //마지막 노드에 NULL이 있으므로 for문을 빠져나온다
printf("%4d", ptr->data);
printf("\n");
}
int nodesum(list_pointer ptr)
{
int sum = 0;
for (; ptr; ptr = ptr->link) //마지막 노드에 NULL이 있으므로 for문을 빠져나온다
sum = sum + ptr->data;
return sum;
}
int nodenumber(list_pointer ptr)
{
int count = 0;
for (; ptr; ptr = ptr->link) //마지막 노드에 NULL이 있으므로 for문을 빠져나온다
count++;
return count;
}
** 단순연결리스트는 삽입, 삭제연산을 간단하게 할 수 있다
** 노드에 문자 값을 넣기 위해서는 strcpy 함수를 이용하여 값을 넣는다
** 자기참조구조체 포인터로 선언하여 주소값으로 연산을 한다
'C & Docker & LINUX' 카테고리의 다른 글
alias를 이용하여 파일 휴지통 이동(mv, rm) (0) | 2016.10.04 |
---|---|
C언어 - 하노이탑 (0) | 2016.06.10 |
리눅스 -quotacheck 허가거부, cannot guess foromat from fiilename 에러 (0) | 2016.06.01 |
C언어 - 스택(stack) push, pop (4) | 2016.05.23 |
C언어 테트리스 3. 벽돌을 그리는 원리 (0) | 2016.05.21 |