링크드리스트 ( Linked List )

2017. 4. 5. 17:19C Algorithm


< 단일 링크드 리스트 >


#include<stdio.h>

#include<stdlib.h>

typedef struct _Node {        // 구조체선언

char Data;

struct _Node *Next

} Node;

Node *head , *end , *temp;

Node *temp1 , *temp2 , *temp3 , *temp4 ;


void Initialize(void){        // 단일 링크드 리스트 생성함수

Node *p ;

head = (Node*)malloc(sizeof(Node));

end = (Node*)malloc(sizeof(Node));


temp1 = (Node*)malloc(sizeof(Node));

temp1->Data = 'A';

head->Next = temp1;

temp1->Next = end;

end->Next = end;

p = temp1;


temp2 = (Node*)malloc(sizeof(Node));

temp2->Data = 'B';

p->next = temp2;

temp2->Next = end;

p = temp2;


temp3 = (Node*)malloc(sizeof(Node));

temp3->Data = 'D';

p->Next = temp3;

temp3->Next = end;

p = temp3;


temp4 = (Node*)malloc(sizeof(Node));

temp4->Data = 'E';

p->Next = temp4;

temp4->Next = end;

p = temp4;

}


=> temp1 -> temp2 -> temp3 -> temp4



void InsertNode( Node *p ){                                                       // 노드 삽입 함수

Node *indexP;

for( indexP = head ; indexP != end ; indexP = indexP->Next ){    // 노드가 들어갈 위치를 찾는다

if( ( indexP->Next->Data ) > ( p->Data ) ){                        // head->Next == temp1 

break;

}

p->Next = indexP->Next ;                                             // 노드가 가리킬 노드 지정

indexP->Next = p->Next ;                                             // 추가된 노드를 가리키게 만듬

}

}


....


int main( void ){

Node *ptr;            // 구조체포인터

int i = 0 ;

Initialize();            // 단일링크드생성


ptr = head->Next;        // ptr = temp1

for ( i=0 ; i<4 ;i++){

printf("%2c" , ptr->Data );

ptr = ptr->Next ;

}                                                => " A B D E " 출력


temp = (Node*)malloc(sizeof(Node));

temp->data = 'C';

InsertNode( temp );


ptr = head->Next ;

for ( i=0 ; i<5 ;i++){

printf("%2c" , ptr->Data );

ptr = ptr->Next ;

}                                                => " A B C D E " 출력                                         



return 0;

}