C & Docker & LINUX

C언어 - 단순 연결 리스트

로픽 2016. 6. 4. 07:42
300x250

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 함수를 이용하여 값을 넣는다

** 자기참조구조체 포인터로 선언하여 주소값으로 연산을 한다

반응형