손잡이 지도 작성 데이터 구조 (1) - C 언어 기초
12221 단어 데이터 구조 와 기초 알고리즘데이터 구조c 언어포인터
저 는 대학 에서 컴퓨터 관련 학과 가 아니 기 때문에 대학 에서 유일 하 게 배 운 프로 그래 밍 언어 가 바로 C 언어 입 니까? 아니면 대학 에서 공 부 했 습 니까? 지금까지 4 년 이 넘 었 고 중간 에 코드 를 별로 쓰 지 않 았 습 니 다.그래서 지금 은 데이터 구조 관련 서적 을 읽 을 때 많은 코드 가 실현 되 는 것 이 생소 하기 때문에 본 격 적 인 학습 을 시작 하기 전에 데이터 구조 에서 자주 사용 되 는 C 언어의 기 초 를 되 돌아 본다.만약 당신 도 저 와 같이 전업 하고 중도 에 출가 를 한다 면 본 고의 내용 에 대해 의문 이나 이의 가 있 으 면 함께 교류 하 는 것 을 환영 합 니 다.본인 은 재능 이 부족 하고 학문 이 얕 으 니 내용 이 틀 리 면 지적 을 해 주 십시오.
조건 부 컴 파일
하나의 헤더 파일 이 두 번 인용 되면 컴 파일 러 는 두 번 의 헤더 파일 의 내용 을 처리 하 는데 오류 가 발생 할 수 있 습 니 다.이러한 상황 을 방지 하기 위해 표준 적 인 방법 은 파일 의 전체 내용 을 조건 부 컴 파일 문 에 두 는 것 이다. 다음 과 같다.
#ifndef LINKLIST_H
#define LINKLIST_H
typedef int ElementType;
typedef struct Node *LinkList;
#endif
이런 구 조 는 통상 적 으로 말 하 는 포장 기 \ # ifndef 이다.헤더 파일 을 다시 인용 할 때 조건 은 가짜 입 니 다. LINKLIST 때 문 입 니 다.H 가 정의 되 었 습 니 다.이 때 프 리 프로세서 가 파일 의 전체 내용 을 건 너 뛰 고 컴 파일 러 는 무시 합 니 다.
포인터
C 언어의 정 수 는 바로 그의 지침 이다. 지침 조작 은 이미 만들어 진 각종 데이터 구 조 를 상당히 편리 하 게 조작 할 수 있다.이 동시에 C 언어의 지침 도 초보 자 들 이 이해 하기 어 려 운 부분 이다. 여기 서 지침 의 지식 점 을 간단하게 요약 한다.
지침 의 성명 및 본질
우선, 포인터 자체 가 메모리 의 주 소 를 대표 하고 있다.이 주소 에 따라 우 리 는 주소 가 가리 키 는 메모리 의 내용 을 조작 할 수 있다.여기 서 우 리 는 흔히 볼 수 있 는 지침 과 관련 된 성명 을 귀납 한다.
int *ip; //
int var = 10; //
ip = &var; // var
int var1 = *ip; //
위의 변 수 를 디 버 깅 에서 보면 ip 자체 가 주소 값 이 고 ip 가 가리 키 는 내용 은 10 입 니 다.변수 var 1 의 값 도 10 이다.
배열 과 포인터
배열 을 설명 하 는 동시에 이 배열 의 변수 이름 은 배열 의 첫 번 째 요소 의 주 소 를 대표 합 니 다.따라서 배열 주 소 를 포인터 변수 에 부여 하면 다음 과 같은 두 가지 방식 을 사용 할 수 있 습 니 다.
int a[10]; //
int *ip = a; //
int *ip1 = &a[0]; //
위의 두 가지 방식 은 완전히 등가 이다.또한, 첫 번 째 요소 의 주 소 를 ip 에 저장 하기 때문에 우 리 는 * ip, * (ip + 1), * (ip + 2) 등 을 사용 하여 배열 요 소 를 방문 할 수 있 습 니 다.
할당 메모리
malloc()
우 리 는 데이터 구조 나 새로운 노드 를 만 들 때 충분 한 메모 리 를 할당 합 니 다. 이때 우 리 는 malloc 라 이브 러 리 함 수 를 사용 해 야 합 니 다.우선, 이 라 이브 러 리 함 수 를 사용 하려 면 헤더 파일 이 포함 되 어야 합 니 다.malloc (size t size) 함수 설명:
매개 변 수 를 되 돌려 주 는 것 은 주소 이기 때문에 이 함수 의 출력 값 을 포인터 변수 에 할당 할 수 있 습 니 다. 그러나 적당 한 종 류 를 할당 하 는 것 이 좋 습 니 다 (C + + 는 반드시 할당 해 야 합 니 다).또한 이 포인터 변 수 는 한 배열 의 첫 주 소 를 가리 키 면 배열 의 이름 으로 사용 할 수 있 습 니 다.
sizeof 키워드
일반 malloc 의 입력 매개 변 수 는 바이트 수 를 직접 입력 하지 않 습 니 다. 편리 하 게 크기 of 키 워드 를 매개 변수 로 입력 하여 서로 다른 유형 이나 구조 체 에 따라 동적 으로 분배 하 는 기능 을 실현 합 니 다.sizeof 연산 자 는 구조, 공용 체, 다른 사용자 정의 데이터 형식의 크기 를 가 져 오 는 데 사용 할 수 있 습 니 다.sizeof 의 문법 을 사용 하면:
sizeof(data type)
그 중에서 data type 은 크기 를 계산 하 는 데이터 형식 으로 구조, 공용 체 와 다른 사용자 정의 데이터 형식 을 포함한다.
free()
이전에 calloc, malloc 또는 realloc 를 호출 하여 분 배 된 메모리 공간 을 사용 합 니 다.데이터 구조, 관련 노드 를 삭제 할 때 자주 사용 합 니 다.free (* ptr) 함수 설명:
free 는 calloc, malloc 또는 realloc 에 대응 하기 때문에 완전한 프로그램 에서 쌍 을 이 루어 존재 해 야 합 니 다. 즉, free 메모리 공간 전에 반드시 이 메모리 가 calloc, malloc 또는 realloc 에 의 해 분배 되 어야 합 니 다.또한 메모리 공간 을 풀 었 지만 지침 은 여전히 존재 합 니 다. 원래 의 위 치 를 가리 키 고 있 습 니 다. 단지 안에서 읽 을 수 없 을 뿐 입 니 다. 이때 이 지침 을 야생 지침 이 라 고 부 릅 니 다. 우 리 는 free 이후 에 지침 을 비 워 야 합 니 다.
다음은 메모리 할당 및 메모리 방출 을 위 한 예제 입 니 다.15 자 를 배치 할 수 있 는 문자열 포인터 변 수 를 만 들 고 sizeof (char) 프로그램 을 사용 하여 문자 에 필요 한 크기 를 스스로 계산 한 다음 15 자 를 곱 하면 15 자 를 배치 할 수 있 음 을 표시 합 니 다.그리고 free 를 사용 하여 내용 을 삭제 하고 마지막 으로 야생 지침 문 제 를 피하 기 위해 지침 을 비 웁 니 다.
char *str = (char *)malloc(sizeof(char)*15);// 15
free(str); //
str = NULL; //
구조 체, 구조 체 지침
하나의 데이터 구조 단원 에는 종종 각종 서로 다른 데이터 유형의 정보 가 포함 되 어 있다. 이때 우 리 는 그것들 을 하나의 전체 로 간주 해 야 한다. 이 를 위해 하나의 구조 체 를 정의 해 야 한다.
구조 체 의 성명 정의
구조 체 성명 정 의 는 struct 키 워드 를 사용 합 니 다. 사용 하기 가 매우 간단 합 니 다. 여기 서 직접 예 를 들 어 우리 가 결점 을 만 들 고 결점 은 정 보 를 포함 하 는 수치 와 지침 주소 가 있다 고 가정 합 니 다.
struct Node {
int Element;
int *Next;
};
성명 이 성공 하면 우 리 는 순서대로 구조 변 수 를 만 들 수 있 습 니 다.
struct Node List;
위의 줄 을 보면 컴 파일 러 는 List 라 는 이름 으로 Node 구조 디자인 의 구조 변 수 를 만 듭 니 다.이때 struct Node 는 int, char 와 유사 한 성명 변수 역할 을 합 니 다.실제로 이 줄 은 아래 의 전체 판 의 간소화 이다.
struct Node {
int Element;
int *Next;
}List;
또한 우 리 는 최초의 두 가지 조작 을 합 쳐 위 에 직접 쓰 는 것 이 더욱 간결 하 다 고 볼 수 있다.
구조 지침
int, char 와 유사 하 게 구조 체 가 성공 하면 포인터 변 수 를 설명 할 수 있 습 니 다. 이때 이 포인터 변 수 는 구조 포인터 라 고 부 르 고 구조 체 의 주 소 를 대표 할 수 있 습 니 다.구조 지침 은 구조 체 를 직접 사용 하 는 것 보다 다음 과 같은 장점 이 있다.
성명 구조 지침 예 는 다음 과 같다.
struct Node {
int Element;
int *Next;
}*L;
/* */
struct Node *L
접근 구조 체 구성원
구조 체 에 대해 서 는 연산 자 를 직접 사용 하여 구성원 을 방문 할 수 있다.구조 지침: 두 가지 조작 방식 이 있 는데 하 나 는 구조 지침 + "- >" + 구성원 명 입 니 다.다른 하 나 는 ("*" + 포인터 변수) + "." + 멤버 명 입 니 다.다음은 예시 입 니 다.
//
List.Element;
//
L->Element;
(*L).Element;
type: def 키워드
마지막 으로 자주 사용 하 는 키 워드 를 소개 합 니 다.데이터 구 조 를 쓸 때 우 리 는 설명 이 편리 하고 코드 의 가 독성 을 높이 기 위해 많은 구조 와 데이터 형식 에 대해 더욱 이해 하기 쉬 운 이름 을 정의 합 니 다.type: def 는 특정한 유형 에 원 하 는 이름 을 만 들 수 있 습 니 다.\ # define 과 달리 제 시 된 기호 이름 은 유형 에 만 국한 되 고 값 을 맞 출 수 없습니다.여기 서 실례 를 들 어 설명 을 하 겠 습 니 다.
typedef int QElemType;
typedef struct QNode
{
QElemType data;
struct QNode *next;
}QNode,*Queueptr;
typedef sturct
{
Queueptr front;
Queueptr rear;
}linkQueue;
이것 은 체인 대기 열의 구조 체 성명 코드 입 니 다.우선 첫 번 째 줄 은 int 형식 에 대해 QElemType 의 이름 을 지 었 습 니 다. 대기 열 에 있 는 요소 값 이 int 형의 수치 임 을 표시 합 니 다.이어서 첫 번 째 구조 체 를 살 펴 보 자.
두 번 째 구조 체 의 정 의 를 보면 이 안 에는 두 개의 지침 이 정의 되 어 있 는데 각각 팀 의 머리 와 팀 의 꼬리 를 가리킨다.Queueptr front 도 struct QNode * front 라 고 쓸 수 있 습 니 다.
마지막 으로 두 번 째 구조 체 의 struct 키 워드 는 다른 이름 이 없 지만 첫 번 째 구조 체 의 키워드 뒤에 QNode 가 하나 더 있 습 니 다. 그럼 여기 QNode 는 받 지 않 아 도 될까요?답 은 필요 하지 않 습 니 다. 이 구조 에서 자신의 유형 을 사 용 했 기 때 문 입 니 다: struct QNode * next;만약 사전에 성명 하지 않 았 다 면, 여기에 잘못 보 고 했 을 것 이다.
참고 문헌
《 C Primer Plus (제5 판) 》
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Sparse Table을 아십니까? 나는 알고 있다.Sparse Table을 지금 배웠으므로, 메모를 겸해 씁니다. 불변의 수열의 임의의 구간에 대한 최소치/최대치를, 전처리 $O(N\log N)$, 쿼리 마다 $O(1)$ 로 구하는 데이터 구조입니다. 숫자 열의 값...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.