개념/자료구조

Linked list 구현하기 (추가, 출력)

웅드 2023. 11. 28. 16:25

addFirst 함수

  • Function name
    • addFirst - head node 뒤에 node 추가 ( 역순 저장 )
  • Parameters
    • lp - 리스트 관리 구조체의 주소
    • data - 추가할 데이터
  • Return
    • 성공 - TRUE
    • 실패 - FALSE
BOOL addFirst(List *lp, int data){

    Node *newp;
    
    if(lp == NULL) return FALSE; //lp포인터 NULL check
    
    newp = (Node *)malloc(sizeof(Node)); // 새 node 생성
    
    if(newp != NULL){
    
    	newp -> data = data; // 새 node에 데이터 저장
        newp -> next = lp -> head -> next; // 새 node의 next 연결
        lp -> head  -> next = newp; // head node 뒤에 새 ndoe 연결
        ++lp -> size; // 리스트 size 증가
        return TRUE;
    }
    else return FALSE; // 새 node 생성 실패시 처리
}

 

addLast 함수

  • Function name
    • addLast - tail node 앞에 새 node 추가 ( 정순 저장 )
  • Parameters
    • lp - 리스트 관리 구조체의 주소
    • data - 추가할 데이터
  • Returns
    • 성공 - TRUE
    • 실패 - FALSE
BOOL addFirst(List *lp, int data){

    Node *newp; // 새 노드 주소저장용 포인터
    Node *btp; // tail node 바로 앞 노드를 가리키는 포인터 변수
    
    if(lp == NULL) return FALSE; //lp포인터 NULL check
    
    newp = (Node *)malloc(sizeof(Node)); // 새 node 생성
    
    if(newp != NULL){
    
    	newp -> data = data; // 새 node에 데이터 저장
        newp -> next = lp -> tail; // 새 node의 next 연결
        
        // tail node의 앞 노드 검색
        btp = lp -> head; // btp에 lp가 가리키는 헤더를 넣어준다.
        while( btp->next != lp->tail){ // btp의 next가 tail이 아닐때 까지
        
        	btp = btp -> next; // btp에 next를 넣어주면서 한칸씩 이동시킨다.
        }
        btp->next = newp; // btp의 next가 tail이면 newp를 가리킨다.
        ++lp -> size; // 리스트 size 증가
        return TRUE;
    }
    else return FALSE; // 새 node 생성 실패시 처리
}

 

displayList 함수

  • Function name
    • displayList - 리스트 내의 모든 데이터 출력
  • Parameters
    • lp - 리스트 관리 구조체의 주소
  • Returns
    • 없다.
void displayList(List *lp){

    Node *curp;
    
    if(lp == NULL) return; // lp 포인터 NULL check
    
    curp = lp->head->next; // lp가 가리키는 head가 가리키는 next 값을 집어넣어라, 데이터의 첫 노드를 가리킴
    
    while(curp != lp -> tail){
    	// list의 마지막 node까지 curp를 옮기면서 data를 출력한다.
    	cout << curp->data << endl;  // tail node일때까지 현재 curp가 가리키는 곳의 데이터를 출력해라
        curp = curp -> next;
    }
    
    return 0;
    
}
반응형