티스토리 뷰
1. 단순 연결 리스트의 구체적 구현(C Implementation)
1) 리스트 생성 알고리즘
// 점 표기식만으로 리스트를 작성한 경우
L <- getNode(); // program에서는 "<-"이라는 표현은 "="와 같음
L.data <- "Cho"; // program에서는 strcpy((*L).data, "Cho");로 작성
L.link <- getNode(); // 왼쪽 표현은 알고리즘 표현임
L.link.data <- "Kim";
L.link.link <- null;
2) 원소를 첫 번째 노드로 삽입
// 리스트 L의 첫 번째 노드로 data 값이 x인 노드를 삽입
addFirstNode(L, x)
// 리스트 L의 첫 번째 노드로 원소 x를 삽입
newNode <- getNode(); // (1) newNode = malloc(sizeof(node));를 표현함
newNode.data <- y; // (2) newNode.data = y; "y"라는 값을 넣음
enwNode.link <- L; // (3) old List의 주소는 L이 가지고 있었음
L <- newNode; // newNode가 L의 새로운 시작 노드가 됨
end addFirstNode()
3) 원소 값이 x인 노드를 p가 가리키는 노드 다음에 삽입
insertNode(L, p, x)
// 리스트 L에서, p 노드 다음에 원소 x를 삽입
// p가 null인 경우는, 현재 pointing하는 노드가 없는 경우임 !!!!!!!
newNode <- getNode(); // 공백 노드를 newNode가 지시
newNode.data <- x; // 원소 값 x를 저장
if(L=null) then { // (a) L이 공백 리스트인 경우
L <- newNode; // newNode 포인터의 노드가 L의 첫 노드됨
newNode.link <- null;
}
else if(p=null) then{ // (b) p가 null일 때는, L의 앞에 삽입
newNode.link <- L; // newNode 다음에 L을 위치시키고
L <- newNode; // L을 앞에 있는 newNode 쪽으로 이동
}
else{ // (c) 드디어, p가 가리키는 노드의 다음 노드로 삽입
newNode.link <- p.link;
p.link <- newNode;
}
end insertNode()
4) 리스트 L의 마지막에 노드 x를 삽입하는 경우 (개념)
(1) while(p.link != null) do // 리스트의 마지막 노드를 찾음
p <- p.link;
(2) p.link <- newNode; // 마지막 노드로 첨가
5) 리스트L의 마지막에 노드x를 삽입하는 경우(구현)
addLastNode(L, x)
// 리스트 L의 끝에 원소 x를 삽입
newNode <- getNode(); // x값을 가진, 새로운 노드 생성
newNode.data <- x;
newNode.link = null;
if(L = null) then { // L은 빈 리스트이므로, 만든 것을 최초 삽입
L <- newNode;
return;
}
p <- L; // p: 임시 순회 포인터로 L의 특정 위치를 찾는 용도로 사용
while(p.link != null) do // 루프 돌리며 L의 마지막 노드(null)를 찾음
p <- p.link; // 다음 노드로 p 포인터를 옮기는 연산
p.link <- newNode; // 마지막 노드로 첨가
end addLastNode()
6) 리스트 L에서 p가 가리키는 노드의 다음 노드 q를 삭제
delete(L, p)
// p가 가리키는 노드의 다음 노드를 삭제
if(L = null) then error;
if(p = null) then
q <- L;
else {
q <- p.link;
if(q = null) then return;
p.link <- q.link;
}
returnNode(q);
end delete()
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 25314
- 직사각형
- 파이썬
- 백준
- SWLIfeCycle
- 피보나치수5
- 베라의 패션
- 과제안내신분
- C99
- 27323
- 삼각형과세변
- 4779
- 칸토어 집합
- C언어
- 알고리즘
- 약수들의합
- 브라우저뜻
- 배수
- 개발계발
- 25304
- 점근적표기
- python
- 약수
- 브라우저
- 데이터추상화
- 배수와약수
- 26069
- SW생명주기
- 붙임성 좋은 총총이
- 다음소수
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
글 보관함