Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 도커 #Docker #배포 #Spring #MySQL #백엔드배포
- /
- 도커 #docker #docker-compose.yml #도커컴포즈 #배포 #spring #mysql #docker-compose
- chatgpt #gpt #챗지피티 #ai
Archives
- Today
- Total
개발자 데뷔!
[C/C++ 7.3] 구조체 포인터 & Linked List 본문
구조체로 포인터 사용 시 *(p.a) 또는 *p.a 안됨 !!! p->a 로 바꾸어 사용 !!!!
[일반] 구조체 멤버에 접근
struct.a
[포인터] 구조체 멤버에 접근
struct->a
EX)
// 2번
// 구조체 + 포인터 문제 !!!!
int main() {
struct robot {
int a, b;
string t;
};
// 포인터로 구조체를 가리킴
robot robert;
robot* p;
p = &robert;
cin >> robert.a >> robert.b >> robert.t;
cout << p->a + p->b <<" "<< p->t; // 구조체로 포인터 사용 시 *(p.a) 또는 *p.a 안됨 !!! p->a 로 바꾸어 사용 !!!!
return 0;
}
Linked List
구조체 포인터를 활용해 linked list 를 만들 수 있다.
(struct는 같은 struct를 가리킬 때 포인터 안붙이고는 사용 못함)
EX)
//3번
// Linked List 만들기 !!!!!
int main() {
struct NODE {
int x;
NODE* next; // 구조체 내부에, 구조체를 가리키는 포인터 한번 더 사용 !!
};
NODE a, b, c;
// a.x = 3
a.x = 3;
// b.x = 5
a.next = &b; // 포인터가 가리키는 것은 주소값 !!
a.next->x = 5; // b.x = 5 // 포인터 로 struct의 member에 접근할 때는 화살표 -> 사용 !!
// c.x = 4
a.next->next = &c; // b.next = &c;
a.next->next->x = 4; // b.next->x = 4;
return 0;
}
EX)
// 4번
int main() {
struct NODE {
int age;
NODE * next1;
NODE * next2;
};
NODE simson, woman1, woman2, man1, man2, man3;
NODE* head;
// head는 simson을 가리킴
head = &simson;
// simson의 구성
head->age = 20; //simson.age = 20;
head->next1 = &woman1; //simson.next1 = &woman1;
head->next2 = &woman2; //simson.next2 = &woman2;
// woman1의 구성
head->next1->age = 29; //woman1.age = 29;
head->next1->next1 = &man1; //woman1.next1 = &man1;
head->next1->next2 = &man2; //woman1.next2 = &man2;
// woman2의 구성
head->next2->age = 30; //woman2.age = 30;
head->next2->next1 = &woman1; //woman2.next1 = &woman1;
head->next2->next2 = &man3; //woman2.next2 = &man3;
// man1의 구성
head->next1->next1->age = 25; //man1.age = 25;
// man2의 구성
head->next1->next2->age = 40; //man2.age = 40;
// man3의 구성
head->next2->next2->age = 38; //man3.age = 38;
return 0;
}
Linked List - Head, Tail 사용
iterater 사용
for(p=head; p!=NULL; p=p->next)
EX) Linked List - Head, Tail 사용
// 3번 __ 답안 코드 // 싱글링크드 리스트 만들기 *****
// 노드 만들기
struct Node{
int num;
Node* next; // 링크 (화살표)
};
// 노드 포인터는 head, tail(last)만 만들어 놓기 ! ***
Node* head;
Node* last;
void addNode(int num){ // 노드가 하나도 없을 때, {=> head=NULL, last=NULL 일 때}
if (head == NULL) { // 왜 last가 NULL 인건 안 따짐 ???
head = new Node(); // new 기법 : 동적메모리 할당 기법으로 변수 생성 하는 것
head->num = num; // ** 반드시 포인터로 접근해서 삭제해야 함 !!!
last = head; // 꼭 헤드로 가리키기
}
// 노드가 한개 이상 있을 떼,
else {
last->next = new Node(); // 1. 우선 새 노드를 생성 한 후(last의 뒤에 연결된),
last = last->next; // 2. last화살표를 뒤로 옮기고
last->num = num; // 3. 생성된 노드에 숫자 넣어줌 (2. 가 선행되서 화살표가 가리켜야지 숫자 넣을 수 있음)
}
}
int main(){
int input;
cin >> input;
for (int i = 1; i <= 4; i++) {
addNode(i * input); // 노드생성 & 연결
}
// single Linked list 출력
Node* p = head; // head, last 와 별개로, 출력을 위한 화살표 p 생성.
// (head부터 출력할것이기 때문에 처음에 head 가리킴)
while (p != NULL) { // p(head)가 NULL 이면 끝남
cout << p->num << " ";
p = p->next;
}
return 0;
}
new 기법 : 동적메모리 할당 기법으로 변수 생성 하는 것
'프로그래밍 언어 > C' 카테고리의 다른 글
[C/C++ 7.4] 더블 포인터 (0) | 2022.03.16 |
---|---|
[C/C++ 3.3.5] 배열 초기화의 특이 case (0) | 2022.03.16 |
[C/C++ 7.3] 포인터 (0) | 2022.03.16 |
[C/C++ 7.2] 구조체 (0) | 2022.03.16 |
[C/C++ 7.1] 함수 (0) | 2022.03.16 |