Programing/C- programing

링크드리스트 :: 간단한 기본 형태 (단방향)

sosal 2010. 8. 19. 05:59
반응형



/*
 http://sosal.tistory.com/
 * made by so_Sal
 */

#include
<iostream>
using namespace std;

class
node{
private:
    int value;
public:
    node(int a){          // 생성자 함수를 이용하여 value 초기화
        value = a;
    }
    int getValue(){      // 값을 얻어오기 위한 함수
        return value;
    }
    node *next;          // 다음 노드를 가리킬 포인터
};

node* first; // 첫번째 노드
node* newNode;
int count;   // 노드의 숫자를 관리할 conter

int main(){
    node a(1);
    cout<<a.getValue()<<endl;
    return 0;
}


class 형태로 node(마디)를 하나 만들었습니다.
생성자 함수로 value의 값을 지정하며,
getValue() 함수로 value값을 리턴하는 클레스를 만들었습니다.
node *next; 는 바로 다음 노드(다음번째 배열 쯤으로 생각하면 쉽겠네요)
를 가리킬 포인터입니다. 클레스는 새로운 자료형을 생성하는것으로,
node라는 자료형을 가리키는 포인터가 되겠습니다.

일단 위에서 간단한 노드를 생성하여 value를 출력해보았는데요,
이제, 링크 형식으로 생성하는 함수를 만들어볼까요?

node* CreateNode(int val){
    node *myNode = new node(val);    // 새로운 노드 new 를 이용하여 생성 및 value 초기화
    myNode->next=NULL;                 // next 노드 포인터에 NULL값 삽입.
    count++;
    return myNode;                           // 새로 만들어진 노드를 리턴
}

새로운 노드를 생성하였다면, 연결시켜야겠죠?

void
AppendNode(node** first, node* newNode){
    if( (*first) == NULL)
        *first = newNode;                      // 첫번째 노드가 비어있을땐, 바로 first에 삽입!
    else{
        node *last = *first;
        while(last->next != NULL){         // 노드 마지막에 삽입하는것이므로.. 마지막까지 이동
            last = last->next;
        }
        last->next = newNode;               // 연결!
    }
}

출력하는 함수를 만들어봅시다.

void PrintNode(){
    node* print = first;
    while(print != NULL){
        if(print->next == NULL)
            cout<<print->getValue()<<endl;       // 마지막 노드는 숫자만
        else
            cout<<print->getValue()<<" -> ";     // 마지막 노드가 아니면 화살표 ㅎㅎ
        print = print->next;
    }
    return;
}

메뉴와 메인함수를 간단하게 만들어보면~~

int menu(){
    int num;
    cout<<"[1] 추가\t[2] 출력\t[3]종료"<<endl;
    cin>>num;
    return num;
}


int main(){
    int a=1;
    int val;
    while(1){                    // 무한루프 돌리면서 메뉴와 인풋을 받아서~
        a = menu();
        if(a==1){
            cout<<"input : ";
            cin>>val;
            newNode = CreateNode(val);  //노드 추가!
            AppendNode(&first,newNode);
        }
        else if(a==2)
            PrintNode();        // 노드 출력~
        else if(a==3)
            break;
    }

    return 0;
}

풀소스.
LINK_