링크 노드 삽입 시 팁

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. 일반적으로 운영 체제 에서 우리 가 원 하 는 메모 리 는 연속 적 인 구역 입 니 다. 첫 번 째 방법 은 이 점 을 잘 해 냈 습 니 다. 두 번 째 방법 은 두 번 째 동적 분배 이기 때문에 연속 적 인 메모리 공간 에 분배 하기 어렵 습 니 다. 또한 메모 리 를 어느 정도 낭비 하 였 습 니 다 (예 를 들 어 내부 조각 과 외부 조각 이 발생 하 는 경우).

좋은 웹페이지 즐겨찾기