[데이터 구 조 를 깊이 이해] 이 진 트 리 실천
데이터 구 조 는 데이터 의 논리 구조 와 물리 구조 와 그들의 상호 관 계 를 연구 하고 이런 구조 에 대해 해당 하 는 연산 을 정의 하 는 것 이다.
무엇이 논리 구조 입 니까?
데이터 간 의 논리 적 관 계 는 우 리 는 보통 네 가지 로 나 뉜 다.
1) 집합 , 구조 중의 데이터 요 소 는 같은 유형 에 속 하 는 것 을 제외 하고 다른 관계 가 없다.
2) 선형 구조 , 구조 중의 데이터 요소 사이 에 일대일 의 관계 가 존재 한다.
3) 트 리 구조 , 구조 중의 데이터 요소 사이 에는 한 쌍 이상 의 관계 가 존재 한다.
4) 도형 구조 또는 망상 구조 , 구조 중의 데이터 요소 사이 에는 여러 쌍 의 관계 가 존재 한다.
무엇이 물리 구조 입 니까?
메모리 에 저 장 된 데이터 형식 은 보통 두 가지 로 나 뉜 다.
1) 순서대로 저장 하고 메모리 에 엄 격 히 연속 저장 하 며 배열 을 통 해 이 루어 질 수 있 습 니 다.
2) 체인 저장, 메모리 에 연속 저장 되 지 않 고 포인터 로 이 루어 집 니 다.
논리 구조 와 물리 구조의 상호 관 계 는 어떤 의의 가 있 습 니까?
논리 구조 가 복잡 할 수록 순서 저장 의 단점 이 뚜렷 하고 체인 식 저장 의 장점 이 두드러진다.
주: 다음은 모두 체인 저장 소 로 분석 합 니 다.
단 방향 링크
typedef struct node
{
datetype val; //
struct node *next; //
}
양 방향 링크
typedef struct node
{
datetype val; //
struct node *head; //
struct node *rear; //
}
이 진 트 리
하나의 결점 과 두 그루 가 서로 교차 하지 않 는 좌우 자나무 로 구성 되 어 있 으 며, 좌우 자 나 무 는 모두 이 진 트 리 이다.
typedef struct btree
{
datetype val; //
btree *left; //
btree *right; //
}B;
/*
:Btree.c
:
1) , , , ( ——DLR)。
2) , —— —— —— 。
:2012-7-3 15:23
:
*/
#include<stdio.h>
#include<stdlib.h>
typedef struct Bitree
{
int data;
struct Bitree *Lchild; //
struct Bitree *Rchild; //
}BitreeNode;
typedef BitreeNode *LinkBitree;
typedef struct Stack
{
LinkBitree data[20];
int top,bottom;
}Stack;
typedef Stack *StackList;
//
LinkBitree CreatBitree();
//
StackList InitStack();
//
void InorderTraverse(LinkBitree Head, StackList Stack);
int main()
{
LinkBitree BitreeHead;
StackList Stack;
printf(" :e = ");
BitreeHead = CreatBitree();
Stack = InitStack();
InorderTraverse(BitreeHead, Stack);
return 0;
}
/*
: ‘ ’
:
:
*/
LinkBitree CreatBitree()
{
int edata;//
LinkBitree Head;
scanf("%d", &edata);
// 0,
if(edata==0)
{
Head = NULL;
}
else
{
Head = (LinkBitree)malloc(sizeof(BitreeNode));
//memory check
if(Head == NULL)
{
printf(" !!");
exit(0);
}
else
{
Head->data = edata;
printf(" %d :e= ", Head->data);
Head->Lchild = CreatBitree();
printf(" %d :e= ", Head->data);
Head->Rchild = CreatBitree();
}
}
return Head;
}
/*
:
。
*/
StackList InitStack()
{
StackList Stack;
Stack = (StackList)malloc(sizeof(Stack));
if(Stack == NULL)
{
printf(" !!");
exit(0);
}
else
{
Stack->top = 0;
Stack->bottom = 0;
}
return Stack;
}
// , ,
void InorderTraverse(LinkBitree Head, StackList Stack)
{
do
{
while (Head != NULL) //
{
printf("%d ", Head->data); //
Stack->data[Stack->top] = Head;//
Stack->top++; //
Head = Head->Lchild; //
}
if (Stack->top != 0)//
{
Stack->top--;
Head = Stack->data[Stack->top]; //
Head = Head->Rchild; //
}
}
while(Stack->top != 0 || Head != NULL);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
9-1. 구조체와 클래스 비교, 구조체 개념(struct)구조체와 클래스는 프로그램 코드의 구성요소가 되는 범용 구조이다. 상수, 변수, 그리고 함수를 정의하는 것과 같은 구문을 사용해서 구조체와 클래스에 프로퍼티와 메서드를 기능적으로 추가할 수 있다. 스위프트에서 클래스...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.