0 부터 C 언어 (9) - 데이터 구 조 를 함께 배 웁 니 다.

4865 단어
목차
1. 데이터 구조의 소개
1. 데이터 구조
2. 데이터 구조의 저장 방식
2. 메모리 의 동적 개척 과 방출
1. 메모리 의 동적 개발
2. 메모리 의 동적 방출
3. 링크 생 성
1. 체인 헤더 의 생 성
4. 링크 의 읽 기와 쓰기
1. 임의의 수량의 노드 만 들 기
2. 링크 의 작성
3. 링크 읽 기
5. 링크 의 삽입
1. 머리 꽂 기
2. 꼬리 삽입 법
6. 링크 의 삭제
1. 데이터 구조의 소개
1. 데이터 구조
상호 간 에 일정한 관 계 를 가 진 데이터 요소 의 집합.데이터 요소 간 의 관 계 를 논리 구조 라 고 한다.흔히 볼 수 있 는 네 가지 기본 논리 구조:
1) 집합: 데이터 요 소 는 같은 집합 에 속 하 는 것 을 제외 하고 다른 관계 가 없다.
2) 선형 구조: 데이터 요소 간 에 일대일 관계 가 존재 한다.전화번호 부
3) 트 리 구조: 데이터 요소 간 에 한 쌍 이상 의 관계 가 존재 한다.디스크 파일 시스템
4) 그물 모양 구조: 데이터 요소 간 에 여러 쌍 의 관계 가 존재 한다.교통 망
2. 데이터 구조의 저장 방식
데이터 요소 간 의 관계 에 따라 순서 저장 구조 와 체인 저장 구조 로 나 눌 수 있다.
순서 저장 구조: 요소 간 의 상대 적 위치 로 데이터 요소 간 의 관 계 를 나타 낸다.저장 주 소 는 연속 적 이다.
체인 식 저장 구조: 데이터 요소 에 다른 데이터 요 소 를 저장 하 는 주소.이 주소 로 데이터 요소 간 의 관 계 를 표시 합 니 다.저장 주 소 는 연속 되 지 않 습 니 다.
2. 메모리 의 동적 개척 과 방출
1. 메모리 의 동적 개발
함수 원형: void * malloc (size t size);
함수 역할: size 바이트 의 메모리 공간 을 분배 하고 분 배 된 메모리 의 지침 을 되 돌려 줍 니 다.
함수 형 삼: sizet. 사용자 정의 형식, unsigned int;
크기 는 할당 할 메모리 공간의 크기 입 니 다.
함수 반환 값: 분 배 된 메모리 공간의 첫 주 소 를 성공 적 으로 되 돌려 주 었 습 니 다.
NULL 을 되 돌려 주지 못 했 습 니 다.
2. 메모리 의 동적 방출
함수 원형: void free (void * block);
함수 역할: 프로그램 동적 으로 신청 한 메모리 공간 을 방출 합 니 다.
프로그램 이 메모리 에 대한 이 용 률 을 높 일 수 있 도록 하 다.
함수 매개 변수: block 은 필요 한 메모리 공간의 첫 번 째 주소 입 니 다.
3. 링크 생 성
습관 적 으로 링크 의 데이터 요 소 를 노드 라 고 부른다.한 노드 가 다음 노드 의 주 소 를 저장 합 니 다.
각 노드 는 데이터 필드, 포인터 필드 로 나 뉜 다.
1. 체인 헤더 의 생 성
#include 

#include 

int create_link_head();

struct tag

{

         int num;

         char name[20];

};



struct link

{

         struct tag std;

         struct link *pnext;

};

struct link *phead;//   

struct link *pnew; //           

struct link *ptemp;//    

int main()

{

         create_link_head();

         return 0;

}

int create_link_head()

{

         phead = (struct link *)malloc(sizeof(struct link));

         if(phead == NULL)

         {

                   printf("       
");                    return -1;          }          printf("
");          phead->pnext = NULL;          return 0; }

4. 링크 의 읽 기와 쓰기
1. 임의의 수량의 노드 만 들 기
int create_link_node(int n)

{

         int i;

         ptemp = phead;

         for(i=0;ipnext = NULL;

                   ptemp->pnext = pnew;

                   ptemp = ptemp->pnext;//ptemp = pnew

         }

         printf("   %d   
",n);          return 0; }

 
2. 링크 의 작성
int write_link_data()

{

         ptemp = phead->pnext;

         while(ptemp != NULL)

         {

                   printf("     
");                    scanf("%d",&ptemp->std.num);                    ptemp = ptemp->pnext;          }          return 0; }

3. 링크 읽 기
int read_link_data()

{

         ptemp = phead->pnext;

         while(ptemp != NULL)

         {

                   printf("%d
",ptemp->std.num);                    ptemp = ptemp->pnext;          }          return 0; }

5. 링크 의 삽입
1. 머리 꽂 기
int add1_link()//  

{

         pnew = (struct link *)malloc(sizeof(struct link));

         printf("       
");          scanf("%d",&pnew->std.num);          pnew->pnext = phead->pnext;          phead->pnext = pnew;          return 0; }

Zhong cha fa!!!!!!
2. 꼬리 삽입 법
int add2_link()//   

{

         pnew = (struct link *)malloc(sizeof(struct link));

         printf("       
");          scanf("%d",&pnew->std.num);          pnew->pnext = NULL;          ptemp = phead->pnext;          while(ptemp->pnext != NULL)//          {                    ptemp = ptemp->pnext;          }          ptemp->pnext = pnew;          return 0; }

 
6. 링크 의 삭제
int dele_link()

{

         int num;

         struct link *pdele;

         printf("          
");          scanf("%d",&num);          ptemp = phead;          while( ptemp->pnext !=NULL)          {                    if(ptemp->pnext->std.num == num)                    {                             pdele = ptemp->pnext;                             ptemp->pnext = ptemp->pnext->pnext;                             free(pdele);                             printf("
");                             return 0;                    }                    ptemp = ptemp->pnext;          }          printf("
");          return -1; }

좋은 웹페이지 즐겨찾기