오래 못 할 짓 하지 않기
데이터 구조 7 ( Functions, Reference parameter, Linked List ) 본문
데이터 구조 7 ( Functions, Reference parameter, Linked List )
쫑알bot 2023. 3. 20. 18:33- -Overloading
→ 같은 형식을 여러 모양으로 나타낸 함수
ex) 덧셈 > 정수 덧셈, 스트링 덧셈 << 넘겨주는 parameter가 다름!
→ 이름과 기능 같고, parameter만 다르게 함수를 2개 만든다! 속이 뻥
→ Handling하는 과정.
- 먼저 Signature에 대한 exact matching 을 시도한다. (다른 방법은 그냥 없다고 생각)
( signature = name , parameter순서 , type )
→ Default function arguments
: 선언할 때, parameter 쪽에 초기값을 설정하고, Call하면서 넘겨줄 때, 별 말 없으면(생략하면) 초기값을 따라감
[ 생략은 뒤에서부터 !! ]
→ Friend function
: Non-member function 이 private member data를 access할 수 있도록 허용
Class의 public function 선언 앞에 ‘friend’ 표시하면, access가능.
+ 해당 클래스의 member function이 아니어도 access 가능하다는 뜻. ( = 클래스 밖에서 만든 함수여도 ㅇㅋ )
예)
다른 친구 무리들(내 private member data ) 한테 '얘 내 친구 A임 애 ㄱㅊ음' 이라고 하면, A는 같은 무리가( = 같은 class )
아니어도 내 친구들한테 접근 가능
- Reference Parameter
1. sub(x) → void sub (int y)
2. 포인터 : sub(&x) → void sub (int *y) > 주소로 콜하고 포인터로 받음
3. Reference Parameter : sub(x) → void sub (int &y) > 변수로 콜하고 주소로 받음
2번 결과 = 3번 결과
→ 포인터의 주소에 가서 작업하는 기능을 사용하는 것
- Linked List
- Array list 표현
장점 : 특정 원소 접근이 용이함 ( = Indexing 가능)
단점 : 고정된 크기임 ( =낭비 혹은 부족) / 연속된 공간이 필요 / 중간의 추가,삭제가 비효율적(밀어내기가 안 되고 빈 칸 그대로 남음)
Array list의 단점을 개선 = Linked list
- Linked List
장점 : 크기, 메모리를 효율적으로 사용할 수 있다.
단점 : 다 Linked 가 되어있어서 Indexing이 불편하다. << a[80] 이게 안 됨
ADT
- DATA : Link 로 연결된 원소 + 첫 원소의 위치를 가리키는 (Head) , 끝 원소를 가리키는 (Tail)
- Operations :
1. Head위치에 원소 하나 추가
2. Tail위치에 원소 하나 추가
3. Head위치에 원소 하나 삭제
4. 현재 Node 수 확인
5. Empty 인지 확인
[ 구현 ]
노드를 먼저 만들고, 어디를 가리킬지 정할 Head랑 Tail 클래스를 미리 만들어야한다.
- 노드
class node {
public:
string name;
double score;
node *link; //다음으로 어디를 가리킬지
void set_data(string s, double n); //
};
void node::set_data(string s, double n) { 노드 안에 넣을 데이터
name = s;
score = n;
}
-Head와 Tail
class my_list {
node *head, *tail;
public:
my_list();
void add_to_head(node t);
void add_to_tail(node t);
node delete_from_head();
int num_nodes();
bool list_empty();
};
my_list:: my_list() {
head = NULL; // 초기값 == 아직 만들어진 노드가 없으면 아무것도 안 가리킨다.
tail = NULL;
}
1. Add_to_head()
알고리즘:
1. 노드 하나를 만든다. (노드 a라고 하자)
2. 노드 a 안에 데이터를 넣는다.
3. Link를 조정
3.1 노드a 가 가리키는 곳 = head가 가리키는 곳의 주소
3.2 head가 가리키는 곳= a로 한다.
(3.3 tail==Null이면 tail==a)
구현
2. Add_to_tail()
알고리즘:
1. 노드 하나를 만든다. (노드 a라고 하자)
2. 노드 a 안에 데이터를 넣는다.
3. Link를 조정
3.1 노드a 가 가리키는 곳 = NULL //제일 마지막이니까
If tail!==NULL //Empty가 아니라면
3.2 tail이 가리키는 것 (tail주소에 있는 것) 이 가리키는 것 = a [ 원래 마지막이었던 원소가 새로 생긴 노드를 가리키게 한다 ]
else //이전 상태가 //Empty면
3.3 head =p;
tail=p;
https://www.youtube.com/watch?v=GnvLJ3qB6lE&list=PLj7x16SB_2GkaAf4y22Vo8uXr8jJ4wbjG
이 사람 거 들어보기
출처 : 한동대학교 김호준교수님 - 데이터구조 PPT
'2학년 1학기 > 데이터 구조 ( Data structure )' 카테고리의 다른 글
데이터 구조 9 (Linked list 활용 , Trees) (0) | 2023.03.27 |
---|---|
데이터 구조 8 (0) | 2023.03.23 |
데이터 구조 6 (Queue , pointer) (0) | 2023.03.16 |
데이터 구조 5 (String , Stack 응용) (0) | 2023.03.14 |
데이터 구조 4 (Constructor , Stack 응용 - @fix들) (0) | 2023.03.09 |