C 언어 구현 링크
용 기 를 내 서 데이터 구 조 를 배 우 는 보 버 의 첫 번 째 접촉 은 순서 표 일 것 입 니 다. 그러면 배열 을 제외 하고 체인 식 방법 으로 순서 표를 실현 하 는 것 은 필수 입 니 다.
다음은 시계 길이, 찾기, 삽입, 삭제, 인쇄 를 통 해 강 강 강 이 어떻게 링크 를 작성 하 는 지 알 아 보 겠 습 니 다.
NO. 0 우선 링크 노드 의 정의
typedef struct Node *List;
struct Node {
int d;
List Next;
};
NO. 1 시계 장 으로 돌아 가기 쉬 워 요. count 하나 면...
int Length(List L){
List p=L;
int i=0;
while(p){
// p!=NULL
p=p->Next;
i++;
}
return i;
}
NO. 2 찾기 는 두 가지 로 나 뉘 어 있 습 니 다.
List FindKth (int k,List L){
List p=L; //
int i=1;
while(i<k && p!=NULL){
p = p->Next; //
i++;
}
if(i==k) return p;
else return NULL;
}
기억 하기: 여기 서 마지막 판단 은 바로 return p 하면 안 됩 니 다.
다음은 수치 에 따 른 것 이다.
List Find(int X,List L){
List p=L;
int i=1;
while(p->d!=X && p!=NULL){
p=p->Next;
i++;
}
return p;
}
NO. 3 여기에 삽입 하 는 것 은 i 에 값 을 X 로 삽입 하 는 결점 사고방식 이다. 구조 결점 s – > 제 I - 1 결점 을 찾 고 P 로 가리 키 기 – > 지침 수정
List Insert(int X,int i,List L){
List p,s;
if(i==1){
//
s = (List)malloc(sizeof(struct Node));
s->d=X;
s->Next=L;
return s;
}
p=FindKth(i-1,L); // I-1 , P
if(p==NULL){
printf("ERROR
");
return NULL;
}
else{
s = (List)malloc(sizeof(struct Node));
s->d = X;
s->Next = p->Next;
p->Next = s;
return L;
}
}
NO. 4 여 기 를 삭제 하려 면 i 번 째 위치의 결점 사고방식 을 삭제 해 야 합 니 다. I - 1 번 결점 을 찾 으 면 P 로 가리 키 기 – > s 로 삭제 할 결점 을 가리 키 기 (p 의 다음) – > p 가 s 의 다음 을 가리 키 기 – > s 를 놓 기 기억 하 세 요. 절대로 놓 는 것 을 잊 지 마 세 요. 그렇지 않 으 면 메모리 가 새 요.
List Delete(int i,List L){
List p,s;
if(i==1){
s=L;
if(L!=NULL) L=L->Next; // ,
else return NULL; //Empty
free(s);
return L;
}
p=FindKth(i-1,L);
if(p==NULL) return NULL; //
else if(p->Next==NULL) return NULL;//
else{
s=p->Next;
p->Next = s->Next;
free(s);
return L;
}
}
NO. 5 인쇄
void print(List L){
while(L!=NULL){
printf("%d ",L->d);
L=L->Next;
}
}
됐어 요. 쓰 고 메 인 함수 에 써 야 돼 요. 아니면 뭔 가 부족 하 다 고 생각 할 수도 있어 요.
malloc 를 사 용 했 기 때문에 헤더 파일 이 빠 지지 마 세 요.
#include
#include
주 함수 에서 반드시 기억 해 야 합 니 다. 빈 노드 는 NULL 을 가리 키 도록 정의 합 니 다!!미천 한 소 백 은 다 쓴 후에 어떻게 인쇄 하 든 문제 가 있 는데 NULL 이 없어 서 그런 것 같 습 니 다.
int main()
{
List L=NULL; //
int A[5]={
5,4,0,3,9};
for(int i=0;i<5;i++){
L = Insert(A[i],i+1,L);
}
print(L);
printf("
");
L = Delete(3,L);
print(L);
return 0;
}
이렇게 하면 테스트 할 수 있어 요.
오늘 의 데이터 구조 공 부 는 여기까지 입 니 다. 반갑습니다.
내일 도 문 제 를 잘 풀 고 연습 을 해 야 돼 요.
잘 자 요 ~
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Sparse Table을 아십니까? 나는 알고 있다.Sparse Table을 지금 배웠으므로, 메모를 겸해 씁니다. 불변의 수열의 임의의 구간에 대한 최소치/최대치를, 전처리 $O(N\log N)$, 쿼리 마다 $O(1)$ 로 구하는 데이터 구조입니다. 숫자 열의 값...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.