데이터 구조 예비 지식

7782 단어
데이터 구조 예비 지식
데이터 구조 설명 을 할 때 우 리 는 일부 기초 지식 을 복습 하고 공 고 히 해 야 한다. 목적 은 데이터 구조의 학습 을 편리 하 게 하기 위해 서 이다. 주로 관련 된 기초 지식 은 지침, 구조 체, 지침 과 배열 의 관계 와 메모리 배분 공간 이다. 그 다음 에 우 리 는 함께 간단하게 보 자.
지침 의 중요성
  • 지침 은 C 언어의 영혼 이다.
  • 정의: 지침 은 주 소 를 저장 하 는 데 사 용 됩 니 다. 예 를 들 어 int * p;p 는 포인터 변수 입 니 다.
  • 주소: 주 소 는 메모리 셀 의 번호 입 니 다. 0 부터 의 비 마이너스 정수, 범위: 0 - FFFFFFFFH

  • 그렇다면 우리 의 CPU (중앙 처리 장치) 와 우리 의 메모리 공간 에 접근 할 때의 원 리 는 무엇 입 니까?원리: CPU 와 메모리 사이 에 주소 선, 제어 선, 데이터 라인 이 존재 합 니 다. 주소 선 은 CPU 가 메모리 공간 을 찾 는 주소 입 니 다. 제어 선 은 주로 데이터 의 읽 기와 쓰 기 를 제어 하 는 작업 입 니 다. 예 를 들 어 0 은 읽 기 이 고 1 은 쓰기 입 니 다. 데이터 라인 은 CPU 와 메모리 공간 에서 데 이 터 를 전달 하 는 과정 입 니 다.
  • 지침 이 뭐 예요?
  • 지침 은 주소 이 고 주 소 는 지침 입 니 다.
  • 포인터 변 수 는 메모리 유닛 주 소 를 저장 하 는 변수 입 니 다.
  • 지침 의 본질은 조작 이 제 한 된 비 마이너스 정수 이다.

  • 지침 의 분류:
  • 기본 유형의 지침
  • 포인터 와 배열 의 관계
  • 구조 데이터 형식 포인터

  • 주의: 변 수 는 반드시 연속 적 으로 분배 되 지 않 고 무 작위 로 메모 리 를 분배 합 니 다.
    메모리
  • 개념: 메모 리 는 다 바이트 로 구 성 된 선형 1 차원 저장 공간 이다.
  • 단위: 메모리 의 기본 구분 단 위 는 바이트 입 니 다.각 바이트 에는 8 비트 가 포함 되 어 있 으 며, 한 사람 당 0 개 또는 1 개 를 저장 하고, 메모리 와 번 호 는 일일이 대응 합 니 다.
  • 소프트웨어 가 실행 되 기 전에 운영 체제 에 저장 공간 을 신청 해 야 한다.소프트웨어 가 실행 되 는 동안 이 소프트웨어 가 차지 하 는 공간 은 더 이상 다른 소프트웨어 에 분배 되 지 않 는 다.소프트웨어 가 실 행 된 후에 운영 체 제 는 이 메모리 공간 을 회수 합 니 다 (운영 체 제 는 이 메모리 공간 에 남 겨 진 데 이 터 를 비우 지 않 습 니 다).

  • 주의:
  • 포인터 변수 도 변수 입 니 다. 일반 변 수 는 * 를 추가 할 수 없고 상수 와 표현 식 전에는 & 를 추가 할 수 없습니다.
  • 부분 변 수 는 본 함수 내부 에서 만 사용 합 니 다.

  • 어떻게 피 변조 함 수 를 통 해 메 인 함수 의 일반 변수의 값 을 수정 합 니까?
  • 실제 참 조 는 관련 변수의 주소 이다.
  • 형 삼 은 이 변수의 유형 을 유형 으로 하 는 지침 변수 이다.
  • 피 조 함수 에서 * 형 삼 변수 이름 의 형식 을 통 해 주 함 수 를 수정 할 수 있 습 니 다.
  • #include
    int main(void)
    {
        int *p; //p      ,int*   p      int       
        int i=10;
        int j;
    
    //  j=*p;
    //  printf("%d
    ",j); //error,p // char ch='A'; // p=&ch; //error, p=&i; //p i ,p i; p i , i p ; ,*p i 。*p i。 //p=10; //error j=*p;// j=i; printf("i=%d,j=%d,*p=%d
    ",i,j,*p); return 0; } : #include void fun(int * i)// *i , , i, int* { *i=100; } int main(void) { int i=9; fun(&i); // 。 printf("i=%d
    ",i); }

    포인터 와 배열 간 의 관계
    배열 이름: 1 차원 배열 이름 은 포인터 변수 입 니 다. 1 차원 배열 의 첫 번 째 요소 의 주 소 를 저장 합 니 다. 그 값 은 바 꿀 수 없습니다. 1 차원 배열 이름 은 배열 의 첫 번 째 요 소 를 가리 키 고 있 습 니 다.결론:
  • a [3] 등 가 는 * (3 + a) 이다.(a + 3) 등가 (3 + a);
  • 
    int a[5]={1,2,3,4,5};
    Show_Aarry(a,5);//a   &a[0],&a[0]    int*  
    
    void Show_Array(int * p,int len)
    {
        int i;
        //P[2]=-1;//p[0]=*p ;  p[2]==*(p+2)==*(a+2)==a[2] ; p[i]      a[i]
        for (i=0;i

    주의:
  • 포인터 변수의 연산
  • 포인터 변 수 는 더 할 수 없고 곱 할 수 없고 나 눌 수 없다.
  • 두 포인터 변수 가 같은 배열 에 속 하면 서로 줄 일 수 있다.
  • 포인터 변 수 는 정 수 를 가감 할 수 있 고 전 제 는 최종 결과 가 포인터 변 수 를 초과 해 서 는 안 된다 는 것 이다
  • .
  • p + i 의 값 은 p + i * (p 가 가리 키 는 변수 가 차지 하 는 바이트 수)
  • p - i 의 값 은 p - i * (p 가 가리 키 는 변수 가 차지 하 는 바이트 수)
  • p++ 등가 p + 1 p - 등가 P - 1
  • 모든 포인터 변 수 는 4 개의 바이트 만 차지 하고 첫 번 째 바이트 의 주 소 는 전체 변수의 주 소 를 표시 합 니 다
  • double *p;
    double x=66.6;  //  double 8   
    p=&x;//x 8   ,1    8 ,1       ,p         ,         
    double arr[3]={1.1,2.2,3.3};
    double *q;
    q=&arr[0];
    printf(“%p
    ”,q); //%p q=&arr[1]; q=printf(“%p
    ”,q); //p,q 8

    메모: 포인터 가 가리 키 는 변수 가 몇 개의 바이트 를 차지 하 든 포인터 변 수 는 4 개의 바이트 만 차지 합 니 다.
    어떻게 함 수 를 통 해 실제 인삼 의 값 을 수정 합 니까?
  • 주소 보 내기
  • 포인터 변수의 값 을 수정 하고 주소 만 수정 할 수 있 습 니 다
  • void fun(int **);
    int main(void)
    {
        int i=9;
        int *p=&i;//    *p;p=&i;
        printf(“%p
    ”,p); f(&p); printf(“%p
    ”,p); return 0; } //void fun(int *q) //{ // q=(int *)0xffffffff; // , p //} void fun(int ** q) { *q=(int *)0xffffffff;// 。 }

    구조 체 의 사용 개술
    왜 구조 체 가 나 타 났 는 지:
  • 복잡 한 데 이 터 를 표시 하기 위해 일반적인 기본 유형 변 수 는 요 구 를 만족 시 키 지 못 한다
  • .
  • 구조 체 의 정의:
  • 구조 체 는 사용자 가 실제 수요 에 따라 스스로 정의 하 는 복합 데이터 유형
  • 이다.
  • 구조 체 를 어떻게 사용 하 는 지: struct Student st = {1000, "zhagnsan", 20};struct Student*pst=&st;
  • 구조 체 변수 명 을 통 해 st. sid
  • 를 실현 한다.
  • 구조 체 변 수 를 가리 키 는 지침 을 통 해 [중점] pst -> sid pst 가 가리 키 는 구조 체 변수 중의 sid 이 구성원
  • 을 실현 합 니 다.
    
    
    #include
    #include 
    //       
    struct Student
    {
        int sid;
        char name[200];
        int age;
    };  //     
    int main(void)
    {
        struct Student st={1000,”zhagnsan”,20};
        printf(“%d,%s%d
    ,”,st.sid,st.name,st.age); printf(“%d,%s%d
    ,”,st); //error st.sid=99; // //st.name=”lisi”; //error strcpy(st.name,”lisi”); st.age=22; struct Student*pst; pst=&st; // pst->sid=99; //pst-> (*pst).sid, (*pst).sid st.sid, pst->sid st.sid return 0; }

    주의:
  • 구조 체 변 수 는 가감 승제 할 수 없 지만 서로 값 을 부여 할 수 있다
  • 일반 구조 체 변수 와 구조 체 지침 변 수 를 함수 로 전달 하 는 문제
  • #include
    struct Student
    {
        int sid;
        char name[200];
        int age;
    };  
    void f(struct Student *pst);
    void g(struct Student st);
    void g2(struct Student *pst);
    int main (void)
    {
    struct Student st;      //   st      
    f(&st);
    //g(st);
    g2(&st);
    //  printf(“%d %s %d
    ”,st.sid,st.name,st.age); // return 0; } void g(struct Student st) // // , , , , { printf(“%d %s %d
    ”,st.sid,st.name,st.age); } void g2(struct Student *pst) { printf(“%d %s %d
    ”,pst->sid,pst->name,pst->age); } void f(struct Student *pst) { (*pst).sid=99; strcpy(pst->name,”zhagnsan”); pst->age=22; }

    malloc () 동적 할당 메모리 개요
  • 동적 메모리 의 분배 와 방출
  • #icclude
    #include
    int main(void)
    {
        int a[5]={1,2,3,4,5};   //    
    
        int len;
        printf(“             :len=”);
        scanf(“%d”,&len);
        int *pArr=(int *)malloc(sizeof(int)*len);   //(int *)     ,   pArr       。   pArr        
        //*pArr=4;//   a[0]=4;
    //  pArr[1]=10;//   a[1]=10;
    //  printf(“%d %d
    ”,*pArr,pArr[1]); // pArr for (int i=0;i
  • 크로스 함수 사용 메모리 설명 및 예제
  • #include 
    int f();
    int main(void)
    {
        int i=10;
        i=f();
        printf(“i=%d
    ”,i); for(i=0;i<2000;++i) f(); return 0; } int f() { int j=20; return j; }
    #include 
     int main ()
    {
        int *p;
    fun(&p);
    ...
    }
    int fun (int **q)
    {
        int s;  //s     。     s    ,  p             
        *q=&s;
    }
    
    #include 
    int main()
    {
        int *p;
        fun(&p);
        ...
    }
    int fun(int **q)
    {
        *q=(int *)malloc(4);    //  4   ,   1       *q,*q==p。    ,    free(),      。    free(),             
    }
    

    Java 프로그램 내부 클래스 정의 방법 A aa = new A ();A pa=(A)malloc(sizeof(A));
    #include
    #include
    struct Student
    {
        int sid;
        int age;
    }
    struct Student *  CreatStudent(void);
    void ShowStudent(struct Student *);
    int main(void)
    {
        struct Student *ps;
        ps=CreatStudent();
        ShowStudent(ps);
        return 0;
    }
    struct Student *  CreatStudent(void)
    {
        struct Student *P=(struct Student *)malloc(sizeof(struct Student));
        p->sid=99;
        p->age=88;
    return p;
    }
    void ShowStudent(struct Student *pst)
    {
        printf(“%d %d
    ”,pst->sid,pst->age); }

    좋은 웹페이지 즐겨찾기