Programing/C- programing

링크드리스트 노드 추가, 연결

sosal 2010. 8. 19. 06:17
반응형
/*
 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

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;
}