[데이터 구조] 제1장 - 서론 (독서 노트)
□ 1.1 데이터 구조 가 무엇 인지 좋 은 프로그램 을 만 들 기 위해 서 는 처리 대상 의 특징 과 처리 대상 간 에 존재 하 는 관 계 를 분석 해 야 한다. 이것 이 바로 데이터 구조 이다.데이터 구 조 는 비수 치 계산 을 연구 하 는 프로그램 설계 문제 에서 컴퓨터 의 조작 대상 과 그들 간 의 관계 와 조작 등 을 연구 하 는 학과 이다.데이터 구 조 는 수학, 컴퓨터 하드웨어, 컴퓨터 소프트웨어 세 가지 사이 에 있 는 핵심 과정 이다.이것 은 일반 프로 그래 밍 의 기초 일 뿐만 아니 라 컴 파일 러, 운영 체제, 데이터 베이스 시스템 과 다른 시스템 프로그램 과 대형 응용 프로그램 을 디자인 하고 실현 하 는 중요 한 기초 이기 도 한다.
□ 1.2 기본 개념 과 용어 1. 데이터 (data): 객관 적 인 사물 에 대한 기호 로 컴퓨터 과학 에서 컴퓨터 에 입력 되 고 컴퓨터 프로그램 에 처 리 될 수 있 는 모든 기 호 를 총칭 한다.데이터 의 의 미 는 매우 광범 위 하 다. 예 를 들 어 이미지 소리 등 은 모두 인 코딩 을 통 해 데이터 의 범주 로 돌아 갈 수 있다.2. 데이터 요소 (data element): 데이터 의 기본 단 위 는 컴퓨터 프로그램 에서 하나의 전체 로 고려 하고 처리 합 니 다.예 를 들 어 나무의 바둑판 구조 와 같이 그림 은 모두 데이터 요소 이다.3. 데이터 대상 (data object): 성질 이 같은 데이터 요소 의 집합 입 니 다.데이터 의 하위 집합 입 니 다.4. 데이터 구조 (data structure): 서로 한 가지 또는 여러 가지 특정한 관계 가 존재 하 는 데이터 요소 의 집합 이다.5. 데이터 형식 (data type): 값 의 집합 과 이 값 에 정 의 된 작업 의 총칭 입 니 다.6. 추상 적 인 데이터 형식 (abstract data type): 수학 모델 과 이 모델 에 정 의 된 작업 을 말한다.7. 다 형 데이터 형식 (polymorphic data type): 그 값 의 성분 이 불확실 한 데이터 형식 을 말 합 니 다.예 를 들 어 데이터 형식 Triplet, 그 요소 e1, e2 와 e3 는 정수 나 문자 나 문자열 일 수 있 고 심지어 여러 가지 성분 으로 복잡 하 게 구 성 될 수 있다.그러나 그 요소 가 어떤 특성 을 가지 든 요소 간 의 관 계 는 같 고 기본 적 인 조작 도 같다.
네 가지 기본 적 인 데이터 구조: 1. 집합: 구조 중의 데이터 요소 간 에 같은 집합 에 속 하 는 관 계 를 제외 하고 다른 관 계 는 없다.2. 선형 구조: 구조 중의 데이터 요소 사이 에 일대일 관계 가 존재 한다.3. 트 리 구조: 구조 중의 데이터 요소 사이 에 여러 개의 관계 가 존재 한다.4. 도형 구조 와 그물 모양 구조: 구조 중의 데이터 요소 사이 에 여러 개의 관계 가 존재 한다.
□ 1.3 추상 데이터 형식의 표현 과 ADT 추상 데이터 형식 이름 { 데이터 대상: (데이터 대상 의 정의) 데이터 관계: (데이터 관계 의 정의) 기본 작업: (기본 작업 의 정의)} ADT 추상 데이터 형식 이름
□ 1.4 알고리즘 과 알고리즘 분석 알고리즘 (algorithm) 은 특정한 문제 해결 절차 에 대한 설명 으로 명령 의 유한 한 서열 로 그 중에서 모든 명령 은 하나 이상 의 조작 을 나타 낸다.알고리즘 의 중요 한 특징: 가난 성 (모든 단 계 는 가난 한 시간 안에 완성 할 수 있 음), 확정 성 (이의 없 음), 타당 성, 입력 (하나의 알고리즘 은 0 개 이상 의 입력 이 있 음), 출력 (하나의 알고리즘 은 하나 이상 의 출력 이 있 음) 이 있 습 니 다.알고리즘 디자인 의 요구: 정확성 (correctness), 가 독성 (readability), 건장 성 (robustness), 효율 과 저 저장량 수요.
□ 알고리즘 효율 의 도량형 은 한 프로그램의 실행 시간 에 보통 두 가지 방법 이 있다. 사후 통계 방법, 사전 분석 추산 방법 이다.고급 언어 로 작 성 된 프로그램 이 컴퓨터 에서 실 행 될 때 소모 되 는 시간 은 다음 과 같은 요소 에 달 려 있다.3. 프로그램 을 작성 하 는 언어 는 같은 알고리즘 에 대해 언어 를 실현 하 는 등급 이 높 을 수록 집행 효율 이 낮다.4. 컴 파일 러 가 만 든 기계 코드 의 품질.5. 기계 가 명령 을 수행 하 는 속도.특정한 알고리즘 운행 작업량 의 크기 는 문제 의 규모 나 문제 규모 의 함수 에 만 의존한다.시간 복잡 도: 점 근 시간 복잡 도 (asymptotic time complextiy) 라 고도 부른다. 그 는 문제 규모 n 의 증가 에 따라 알고리즘 집행 시간의 성 장 률 은 F (n) 의 성 장 률 과 같다 고 말 했다.시간 복잡 도 는 일반적인 상황 에서 최 악의 상황 에서 의 시간 복잡 도 를 가리킨다.문장의 빈도: 이 문장의 중복 집행 횟수 를 가리킨다.보통 상수 단계, 선형 단계, 제곱 단계 가 있다.빈도 에 대하 여 우 리 는 가능 한 한 여러 단계 의 알고리즘 을 사용 해 야 하 며, 지수 단계 의 알고리즘 을 사용 하 는 것 을 원 하지 않 는 다.공간 복잡 도 (space complexity): 알고리즘 에 필요 한 저장 공간의 양 입 니 다.
코드 1: 데이터 형식 Triplet 의 정의
typedef int Status; /* Status , , OK */
typedef int ElemType; /* ElemType */
/* */
typedef ElemType *Triplet; /* InitTriplet */
/* Triplet ElemType , ElemType */
/* Triplet ElemType( c1-1.h ) (8 ) */
Status InitTriplet(Triplet *T,ElemType v1,ElemType v2,ElemType v3)
{ /* : T, T v1,v2 v3 */
*T=(Triplet)malloc(3 * sizeof(ElemType));
if(!*T)
exit(OVERFLOW);
(*T)[0]=v1,(*T)[1]=v2,(*T)[2]=v3;
return OK;
}
Status DestroyTriplet(Triplet *T)
{ /* : T */
free(*T);
*T = NULL;
return OK;
}
Status Get(Triplet T, int i, ElemType *e)
{ /* : T ,1≤i≤3。 : e T i */
if(i <1 || i > 3)
return ERROR;
*e = T[i-1];
return OK;
}
Status Put(Triplet T, int i, ElemType e)
{ /* : T ,1≤i≤3。 : T i e */
if(i<1||i>3)
return ERROR;
T[i-1] = e;
return OK;
}
Status IsAscending(Triplet T)
{ /* : T 。 : T , 1, 0 */
return(T[0] <= T[1] && T[1] <= T[2]);
}
Status IsDescending(Triplet T)
{ /* : T 。 : T , 1, 0 */
return(T[0] >= T[1] && T[1] >= T[2]);
}
Status Max(Triplet T,ElemType *e)/* */
{ /* : T 。 : e T */
*e = (T[0]>=T[1]) ? ((T[0]>=T[2]) ? T[0]:T[2])
:((T[1]>=T[2]) ? T[1]:T[2]);
return OK;
}
Status Min(Triplet T,ElemType *e)
{ /* : T 。 : e T */
*e = (T[0]<=T[1]) ? (( T[0]<=T[2] ) ? T[0]:T[2])
:(( T[1]<=T[2] )?T[1]:T[2]);
return OK;
}
int _tmain(int argc, _TCHAR* argv[])
{
Triplet T;
ElemType m;
Status i;
i=InitTriplet(&T,5,7,9);
printf(" ,i=%d(1: ) T :%d %d %d
",i,T[0],T[1],T[2]); /* ElemType , printf() 。 */
i=Get(T,2,&m);
if(i==OK)
printf("T 2 :%d
",m);
i=Put(T,2,6);
if(i==OK)
printf(" T 2 6 ,T :%d %d %d
",T[0],T[1],T[2]);
i=IsAscending(T); /* ElemType , ElemType , */
printf(" ,i=%d(0: 1: )
",i);
i=IsDescending(T);
printf(" ,i=%d(0: 1: )
",i);
if((i=Max(T,&m))==OK) /* */
printf("T :%d
",m);
if((i=Min(T,&m))==OK)
printf("T :%d
",m);
DestroyTriplet(&T); /* */
printf(" T ,T=%u(NULL)
",T);
return 0;
}
코드 2: 거품 알고리즘 의 시간 복잡 도
/*
, n(n-1)/2
O(n2)
*/
void bubble_sort(int a[], int n)
{
int i = 0;
int j = 0;
int change = FALSE;/*change , */
int temp;
for (i = n - 1, change = TRUE; i >= 1 && change; --i ){
change = FALSE;
/* */
for (j = 0; j < i; ++j){
if (a[j] > a[j+1]){
/* */
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
change = TRUE;
}
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int intArray[] = {1,4,3,2,5};
/* intArray */
bubble_sort(intArray, sizeof(intArray)/sizeof(intArray[0]));
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.