데이터 구조 코드 연습 (1) 순서 표 의 실현

3904 단어 데이터 구조
머리말
데이터 구 조 는 컴퓨터 나 다른 컴퓨터 관련 학 과 를 공부 하 는 핵심 과정 입 니 다. 제 가 있 는 대학교 에서 사용 하 는 교 재 는 청화대학 의 엄 울 민 교수 가 작성 한 데이터 구조 교재 입 니 다.이 책 은 나의 현재 수준 으로 볼 때 그것 을 평가 할 자격 이 없다.그러나 한 가지 말 할 수 없 는 것 은 이 숫자 안의 코드 는 대부분이 c 코드 의 위조 코드 로 보 여 주 는 것 이다.이것 은 많은 학습자 들 이 공부 할 때 실행 가능 한 프로그램 을 만들어 서 실험 할 수 없 게 한다.많은 학습 상의 불편 을 야기 하 였 다.여기 서 저 는 여러분 과 함께 데이터 구 조 를 분석 하고 학습 하 는 코드 를 드 리 겠 습 니 다.
 
데이터 구 조 를 언급 하면 먼저 말 해 야 한다.가장 기본 적 인 데이터 구조 인 선형 표.대부분의 데이터 구조 책 에서 가장 먼저 소개 되 는 것 도 이것 이다.선형 표 는 두 가지 가장 기본 적 인 저장 구조 가 있다.하 나 는 순서 저장 구조 이 고 하 나 는 체인 저장 구조 이다.오늘 은 순서 저장 구 조 를 논의 하 러 왔 습 니 다.
순서 저장 구조 란 주소 로 연 속 된 저장 장치 로 표 의 요 소 를 순서대로 저장 하 는 것 을 말한다.표 에서 요소 간 의 논리 적 관 계 를 나타 내기 위해 저장 공간 을 추가 로 늘 릴 필요 가 없다 (체인 식 저장 구조 에 비해 다음 요소 의 위 치 를 포인터 로 저장 해 야 하고 나중에 언급 할 것 이다). 또한 무 작위 액세스 의 데이터 구 조 를 실현 할 수 있다.
 다음은 순서 표 의 실현 에 필요 한 헤더 파일 과 구조의 정의 입 니 다.
#include 
#include 
#include 
#define INIT_SIZE 100

//              int  
typedef int dataType;

//          
typedef struct {
	dataType *data;	//          
	int size;	//         
	int maxSize;	//               
}SqList;

 저장 구 조 를 논의 하 는 것 은 구조 적 정의 뿐만 아니 라 자주 사용 하 는 조작 도 고려 해 야 한다.삭제, 수정, 조사 등등.다음 순서 표 의 기본 동작 을 실현 합 니 다.
 
//      
//                  
void InitList(SqList *l) {										
	//                 
	l->data = (dataType*)malloc(INIT_SIZE * sizeof(dataType));	
	//         
	l->size = 0;												
	//           
	l->maxSize = INIT_SIZE;										 
}
//    l   k       x
//           ,        ,       
void Insert(SqList *l, int k, dataType x) {			
	//            1,           
	if (k<1 || k>l->size + 1)						
		exit(1);
	//                
	if (l->size == l->maxSize)						
		exit(1);
	// i        ,              k  
	for (int i = l->size; i >= k; i--) {			
		l->data[i] = l->data[i - 1];
	}
	// x     k     ,      1
	l->data[k - 1] = x;								
	l->size++;
}
//       k    
//            ,      
void Delete(SqList *l, int k) {						
	//         1         
	if (k < 1 || k > l->size)						
		exit(1);
	//                     
	for (int i = k; i < l->size; i++) {				
		l->data[i - 1] = l->data[i];
	}
	//   1
	l->size--;										
}
//         
int empty(SqList *l) {								
	//     ,         0
	return l->size == 0;
}

//        
int full(SqList *l) {								
	//     ,              
	return l->size == l->maxSize;
}
//      i      
//           
dataType GetData(SqList *l, int i) {				
	//           
	if (i < 1 || i>l->size)							
		exit(1);
	//  i        
	return l->data[i - 1];							
}
//         x   
//            
int locate(SqList *l, dataType x) {					
	//     ,      x         1
	for (int i = 0; i < l->size; i++) {				
		if (l->data[i] == x) {
			return i + 1;
		}
		return 0;
	}
}
//     
void Print(SqList *l) {								
	//     ,   
	for (int i = 0; i < l->size; i++) {				
		printf("%d ", l->data[i]);
	}
	printf("
"); }
int main() {
	//          ,                 
	SqList list;				
	SqList *pList = &list;	
	//      
	InitList(pList);			
	//         10。        10
	Insert(pList, 1, 10);		
	//         20。        20 10
	Insert(pList, 1, 20);		
	//       。        20
	Delete(pList, 2);			
	//         30。        30 20
	Insert(pList, 1, 30);		
	//         40。        40 30 20 
	Insert(pList, 1, 40);	
	//     
	Print(pList);
	//         
	printf("%d
", GetData(pList,2)); system("pause"); return 0; }

이상 은 순서 표 구조 와 기본 적 인 작업 의 실현 입 니 다. 이 블 로그 가 여러분 을 도 울 수 있 기 를 바 랍 니 다.어떤 의문 이나 가르침 이 있 으 면 댓 글 을 달 거나 메 일 을 제 메 일 로 보 낼 수 있 습 니 다.
제 메 일 은 요[email protected]

좋은 웹페이지 즐겨찾기