데이터 구조 - 선형 표 의 정적 / 동적 분배 와 순서 / 체인 저장
데이터 요소 가 컴퓨터 에 저장 되 는 것 은 순서 저장 과 체인 저장 으로 나 뉜 다.
순서 저장: 요소 가 메모리 에 있 는 상대 적 인 위 치 를 통 해 데이터 요소 간 의 논리 적 관 계 를 나타 낸다.
체인 저장: 지시 요소 저장 주소 의 지침 을 통 해 데이터 요소 간 의 논리 적 관 계 를 나타 낸다.
ps: 담 호 강 판 c 언어 는 8.8 메모리 의 동적 배분 과 정적 배분 과 관련된다.
동적 분배: 데이터 저장 용량 이 고정 되 지 않 음 (담 호 강: 8.8P 285 동적 분 배 는 필요 할 때 수시로 열 리 고 필요 하지 않 을 때 수시로 방출)
구 글 검색 동적 분배 의 연속 저장 소: (64 페이지) 프로 그래 밍 언어 를 통 해 제공 하 는 동적 저장 기능 을 통 해 지 정 된 크기 의 연속 공간 을 신청 합 니 다.
정적 분배: 데이터 저장 용량 고정
구 글 검색 정적 분배 의 연속 저장 소: (64 페이지) 프로 그래 밍 언어 가 제공 하 는 구조 류 데이터 유형 - 배열 (순서 표)
ps: 엄 위 민 판 장 절 은 순서 표 와 링크 의 실현 으로 나 뉘 는데 동태 적 으로 분 배 된 순서 저장 만 있 고 정태 적 으로 분 배 된 순서 저장 이 없다. 그러나 저 는 코드 실현 은 순서 표 와 선형 표 의 실현 에 국한 되 지 않 을 뿐만 아니 라 네 가지 로 나 누 어야 한다 고 생각 합 니 다. 동태 적 으로 분 배 된 순서 저장, 정태 적 으로 분 배 된 순서 저장, 동태 적 으로 분 배 된 체인 저장,정적 분배 의 체인 식 저장 소 이 고 순서 표 와 체인 표 의 구분 은 순서 저장 소 와 체인 식 저장 소의 구분 과 같 지 않 기 때문에 본 편 은 정적 분배 와 동적 분 배 를 바탕 으로 하 는 순서 저장 소 와 체인 식 저장 소 를 소개 한다.
선형 표 는 동적 분 배 를 바탕 으로 하 는 순서 저장 구조 인 엄 위 민 (사본 원문 p22)
(실현 방법: 구조 체 구성원 표 열 은 포인터 와 동적 으로 배열 을 엽 니 다)https://www.cnblogs.com/Romi/archive/2012/01/07/2315788.html
1. 순서 표 구조
순서 표 구조 전에 다음 과 같은 매크로 정의 와 변 수 를 교체 하여 코드 의 이 해 를 편리 하 게 합 니 다.
1 2 3 4 5 6 7 8 9 10 11 12 13
#define TRUE 1
#define FALSE 0
#define OK 1
#define ok 1
#define ERROR 0
#define error 0
#define INFEASIBLE -1
#define LIST_INIT_SIZE 100;
#define LISTINCREMENT 10;
typedef
int
ElemType;
typedef
int
Status;
구조 체 로 하나의 순서 표를 구성 하고 순서 표 의 주소, 길이, 저장 용량 의 표 시 를 정의 하 며 코드 는 다음 과 같다.
1 2 3 4 5
typedef
struct
{
ElemType *elem;
// ,
int
length;
// ( )
int
listsize;
//
}SqList;
2. 순서 표 초기 화
다음은 이 순서 표를 초기 화하 고 순서 표 에 미리 정 의 된 크기 의 배열 공간 을 분배 하 며 현재 순서 표 의 길 이 를 0 으로 설정 합 니 다. 만약 에 요소 의 개수 가 분 배 된 저장 용량 보다 크 면 용량 을 확장 합 니 다 (초기 화 시 확장 하지 않 고 순서 표 사용 중 필요 에 따라 용량 을 확장 합 니 다).코드 는 다음 과 같 습 니 다:
1 2 3 4 5 6 7 8 9 10 11 12
Status InitList(SqList *L)
{
(*L).elem=(ElemType*)
malloc
(100*
sizeof
(ElemType));
// LIST_INIT_SIZE, 100, realloc ?
if
((*L).elem==NULL)
{
exit
(OVERFLOW);
}
(*L).length=0;
(*L).listsize=LIST_INIT_SIZE;
return
ok;
}
선형 표 는 정적 분 배 를 바탕 으로 하 는 순서 저장 구조 -
(실현 방법 1: 구조 체 구성원 표 열 은 정적 배열 로) 참고 만 합 니 다.https://www.cnblogs.com/newwy/archive/2010/10/10/1847449.html
https://blog.csdn.net/zwj1452267376/article/details/85011271
정적 할당 메모리:
const int Maxsize = 100;//표 의 최대 길 이 를 정의 합 니 다. //ElemType 은 저장 요소 의 형식 type: def struct {를 표시 합 니 다. ElemType data [MaxSize]; / 순서 표 의 요소 int length; / 순서 표 의 현재 길이 }Sqlist;
(실현 방법 2: 엄 위 민 (정태 링크 는 원문 p31 참조) 분쟁 처리:https://ask.csdn.net/questions/274643?ops_request_misc=%7B%22request_id%22%3A%22158195017719725256734898%22%2C%22scm%22%3A%2220140713.130063897..%22%7D&request_id=158195017719725256734898&biz_id=4&utm_source=distribute.pc_search_result.none-task
StaticLinkList.h
#ifndef _STATIC_LINK_LIST_H_ #define _STATIC_LINK_LIST_H_ #define MAXSIZE 100
typedef enum {ERROR,OK}Status;
typedef struct{ int cur; int data; }StaticLinkList[MAXSIZE];
선형 표 는 동적 분 배 를 바탕 으로 하 는 체인 식 저장 구조 인 엄 위 민 (사본 원문 p28)
(실현 방법 1: 구조 체 구성원 을 지침 으로 정의)
(실현 방법 2: 구조 체 구성원 을 지침 으로 정의)https://www.cnblogs.com/choon/p/3915706.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
#define _CRT_SECURE_NO_DEPRECATE
#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1
#include
#include
/* , , , 。*/
struct
Student
{
int
No;
//
struct
Student *next;
};
int
main()
{
struct
Student *p1, *p2, *head;
int
n = 0;
//
head = NULL;
p1 = (
struct
Student *)
malloc
(
sizeof
(
struct
Student));
printf
(
" 1
"
);
scanf
(
"%d"
, &p1->No);
p2 = p1;
// ,p1 p2 1
while
(p1->No != 0)
{
n++;
if
(n == 1)
{
head = p1;
}
else
{
p2->next = p1;
}
p2 = p1;
//p2
printf
(
" , 0 :
"
);
p1 = (
struct
Student *)
malloc
(
sizeof
(
struct
Student));
scanf
(
"%d"
, &p1->No);
};
p2->next = NULL;
// ,p2->next NULL
//
struct
Student *p;
p = head;
while
(p != NULL)
{
printf
(
"%d,"
, p->No);
p = p -> next;
}
printf
(
"
"
);
system
(
"pause"
);
}
선형 표 는 정적 분 배 를 바탕 으로 하 는 체인 식 저장 구조 인 담 호 강 (p310)
(실현 방법: 구조 체 구성원 을 지침 으로 한다)
https://www.cnblogs.com/choon/p/3915706.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
#define _CRT_SECURE_NO_DEPRECATE
#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1
#include
#include
/* , , , “ ”。*/
struct
Student
{
int
num;
float
score;
struct
Student *next;
};
int
main()
{
struct
Student stu1, stu2, stu3, *head, *p;
stu1.num = 1001; stu1.score = 80;
// stu1 num score
stu2.num = 1002; stu2.score = 85;
// stu2 num score
stu3.num = 1003; stu3.score = 90;
// stu3 num score
head = &stu1;
// 1 stu1
stu1.next = &stu2;
// stu2 stu1 next
stu2.next = &stu3;
// stu3 stu2 next
stu3.next = NULL;
//stu3 , next , NULL
p = head;
// p 1
//
do
{
printf
(
"%d,%f
"
, p->num, p->score);
// p
p = p->next;
// p
}
while
(p != NULL);
// p next NULL,
system
(
"pause"
);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.