링크 노드 삽입 시 팁
2167 단어 데이터 구조
링크 의 노드 는 세 개의 수 치 를 포함 합 니 다. * next: 포인터 가 다음 노드 를 가리 키 고 value: 링크 의 값, name []: 링크 의 이름 을 바 꾸 고 이름 을 바 꾸 어 이 노드 가 분배 하 는 주 소 를 가리 킵 니 다.
struct A{
struct A * next;// int char 4
int value;// 4
char name[0];// ,
}
지금 테스트 해 보 세 요:
main()
{ struct A text;
printf("the text size is:%d
",sizeof(text));
system("pause");
}
:the text size is:8
위의 모든 것 은 하나의 문 제 를 설명 하기 위해 서 입 니 다. char name [] 은 메모리 공간 을 차지 하지 않 습 니 다.그렇다면 이렇게 하면 무슨 좋 은 점 이 있 을 까? 그렇다면 그 가 지침 유형 이 라 고 가정 해 보 자.
struct A{
struct A * next;// int char 4
int value;// 4
char * name;// 4
}
위 에서 알 수 있 듯 이 포인터 형식 이 라면 4 바이트 의 메모리 공간 을 차지 하고 아래 를 내 려 다 볼 수 있 습 니 다.
1. char name [] 의 경우:
현재 하나의 링크 에 새로운 노드 를 삽입 하고 이 노드 의 value 값 이 차지 하 는 메모리 공간 은 9 이 며 뒤에 '차지 하 는 바이트' 를 더 하면 10 + sizeof (A) 바이트 의 메모리 공간 을 분배 해 야 합 니 다.
struct A *p = (struct A*)malloc(sizeof(struct A)+10);
그러면 name [] 의 첫 번 째 요 소 는 분 배 된 주소 의 첫 번 째 주 소 를 가리 키 게 됩 니 다.
2. char * p 의 경우:
같은 링크 에 새로운 노드 를 삽입 하려 면 10 + sizeof (A) 바이트 의 메모리 공간 을 할당 해 야 합 니 다.
// A , *p 。
struct A *p = (struct A*)malloc(sizeof(struct A));
// value , name 。
struct ->name = (char *)malloc(10*(sizeof(char)));
상술 한 몇 가지 과정 에 근거 하여 얻 을 수 있다.
1. 배열 (char name []) 을 링크 의 구조 체 형식 으로 하고 메모리 공간 은 포인터 (char * name) 보다 작 습 니 다.
2. 배열 (char name []) 이 라면 메모리 주소 공간 을 한 번 동적 으로 할당 하면 됩 니 다. 포인터 (char * p) 는 두 번 할당 해 야 합 니 다.
3. 일반적으로 운영 체제 에서 우리 가 원 하 는 메모 리 는 연속 적 인 구역 입 니 다. 첫 번 째 방법 은 이 점 을 잘 해 냈 습 니 다. 두 번 째 방법 은 두 번 째 동적 분배 이기 때문에 연속 적 인 메모리 공간 에 분배 하기 어렵 습 니 다. 또한 메모 리 를 어느 정도 낭비 하 였 습 니 다 (예 를 들 어 내부 조각 과 외부 조각 이 발생 하 는 경우).
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.