개념/자료구조
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;
}
반응형