C 언어 는 단 방향 링크 의 생 성, 삽입, 삭 제 를 실현 합 니 다 - - 묵 백
5737 단어 체인 테이블
1. 일반적인 링크 생 성
링크 를 만 드 는 데 중요 한 사상 이 있 습 니 다.그것 은 매번 하나의 노드 만 만 만 드 는 것 이다.이렇게 링크 를 만 드 는 난이도 가 크게 떨 어 졌 다.우리 의 알고리즘 사 고 는 이렇다.생 성 이란 새로운 노드 를 링크 끝 에 삽입 하 는 것 에 불과 합 니 다.그래서 우리 가 하 는 일 은 매우 간단 하 다. 두 단계 만 필요 하 다. 1. 끝 노드 를 찾 아 2. 새로운 노드 를 삽입 해 야 한다.
//
#include
#include
typedef struct node{
int value;
struct node *next;
}Node;
int len=sizeof(Node);
Node* creat_normal(Node *head,int value);//
int main()
{
int n;
Node *head=(Node *)malloc(len);//
head->next=NULL;// !!!
Node *p=NULL;
do{
scanf("%d",&n);
if(n==0) break;
head=creat_normal(head,n);
}while(1);//
for(p=head->next;p;p=p->next){
printf("%d
",p->value);
}
return 0;
}
Node* creat_normal(Node *head,int value)//
{
Node *pnew,*tail=head;
pnew=(Node *)malloc(len);
pnew->value=value;
pnew->next=NULL;
while(tail->next!=NULL) tail=tail->next;
tail->next=pnew;
return head;
}
2. 자동 정렬 순서 링크 만 들 기
OK, 우 리 는 많은 사람들 이 우리 에 게 링크 에 정렬 하 라 고 요구 하 는 것 을 알 고 있 습 니 다. 만약 에 교환 값 만 정렬 하면 당연히 할 말 이 없습니다.링크 를 만 드 는 과정 에서 순 서 를 정 해 달라 고 하면?우리 의 알고리즘 사 고 는 다음 과 같다. 1. 이 새로운 노드 가 가 야 할 위 치 를 찾 아 라. 2. 새로운 노드 를 삽입 하 라.듣 기 에 좀 간단 한 것 같 지만 사실은 그렇다.어떻게 그 노드 가 가 야 할 곳 을 찾 습 니까?나 는 while 대 법 이 좋다 고 말 할 수 밖 에 없다!그리고 그냥 꽂 았 어 요. 어떻게 꽂 는 게 편 할 것 같 아 요?당연히 인접 한 지침 두 개 를 써 야 지.
//
#include
#include
typedef struct node{
int value;
struct node *next;
}Node;
int len=sizeof(Node);
Node* creat_sort(Node *head,int value);//
int main()
{
int n;
Node *head=(Node *)malloc(len);//
head->next=NULL;// !!!
Node *p=NULL;
do{
scanf("%d",&n);
if(n==0) break;
head=creat_sort(head,n);
}while(1);//
for(p=head->next;p;p=p->next){
printf("%d
",p->value);
}
return 0;
}
Node* creat_sort(Node *head,int value)//
{
Node *pnew,*q,*p;
pnew=(Node *)malloc(len);
pnew->next=NULL;
pnew->value=value;
q=head;p=q->next;
while(p&&p->valuevalue){// , pnew qp
q=p;
p=p->next;
}// p->value>=pnew->value
pnew->next=p;
q->next=pnew;
return head;
}
3. 링크 노드 의 삽입
사실 방법 은 방금 자동 으로 순 서 를 정 하 는 링크 를 만 드 는 것 과 마찬가지 로 두 개의 포인터 로 이 새로 온 노드 가 어디 에 삽입 해 야 하 는 지 검색 한 다음 에 꽂 으 면 된다.여기에 새 노드 값 과 같은 곳 에 삽입 합 시다.
//
#include
#include
typedef struct node{
int value;
struct node *next;
}Node;
int len=sizeof(Node);
Node* creat_sort(Node *head,int value);//
Node* insert(Node *head,int value);
int main()
{
int n;
Node *head=(Node *)malloc(len);//
head->next=NULL;// !!!
Node *p=NULL;
do{
scanf("%d",&n);
if(n==0) break;
head=creat_sort(head,n);
}while(1);//
for(p=head->next;p;p=p->next){
printf("%d
",p->value);
}
creat_sort(head,34);
for(p=head->next;p;p=p->next){
printf("%d
",p->value);
}
return 0;
}
Node* creat_sort(Node *head,int value)//
{
Node *pnew,*q,*p;
pnew=(Node *)malloc(len);
pnew->next=NULL;
pnew->value=value;
q=head;p=q->next;
while(p&&p->valuevalue){// , pnew qp
q=p;
p=p->next;
}// p->value>=pnew->value
pnew->next=p;
q->next=pnew;
return head;
}
Node* insert(Node *head,int value)
{
Node *q,*p;
Node *pnew=(Node*)malloc(len);
pnew->next=NULL;
pnew->value=value;
q=head;p=head->next;
while(p&&p->value!=pnew->value){
q=p;
p=p->next;
}
pnew->next=p;
q->next=pnew;
return head;
}
4. 링크 에서 지정 한 요소 삭제
우 리 는 간단 한 예 를 들 어야 한다. 예 를 들 어 내 가 34 인 노드 를 삭제 하려 면 어떻게 해 야 합 니까?사실 요 소 를 삭제 하 는 것 이 가장 좋다.나 는 하나의 포인터 p 로 노드 를 옮 겨 다 니 며 p - > next - > value = = 34 를 만족 시 키 면 p 의 다음 요 소 는 내 가 삭제 할 요소 임 을 설명 한다.어 떡 하지?p - > next = p - > next - > next;free(p->next);하면 되 나 요?분명히 안 돼!이렇게 하면 잘못된 공간 을 풀 수 있 고 삭제 할 공간 주 소 를 잃 어 버 려 서 다시 찾 을 수 없고 영원히 풀 수 없습니다.그럼 어 떡 해?똑똑 한 독자 들 이 머리 를 써 서 생각해 보 세 요.사실 간단 해.아까 삽입 한 거 랑 똑 같 아 요.두 개의 지침 을 도입 하면 된다.q 와 p, 마지막 p 는 삭제 합 니 다. q - > next = p - > next;free§;이렇게 하면 돼.
//
#include
#include
typedef struct node{
int value;
struct node *next;
}Node;
int len=sizeof(Node);
Node* creat_sort(Node *head,int value);//
Node* delete_value(Node *head,int value);
int main()
{
int n;
Node *head=(Node *)malloc(len);//
head->next=NULL;// !!!
Node *p=NULL;
do{
scanf("%d",&n);
if(n==0) break;
head=creat_sort(head,n);
}while(1);//
for(p=head->next;p;p=p->next){
printf("%d
",p->value);
}
head=delete_value(head,3);
for(p=head->next;p;p=p->next){
printf("%d
",p->value);
}
return 0;
}
Node* creat_sort(Node *head,int value)//
{
Node *pnew,*q,*p;
pnew=(Node *)malloc(len);
pnew->next=NULL;
pnew->value=value;
q=head;p=q->next;
while(p&&p->valuevalue){// , pnew qp
q=p;
p=p->next;
}// p->value>=pnew->value
pnew->next=p;
q->next=pnew;
return head;
}
Node* delete_value(Node *head,int value)
{
Node *q,*p;
q=head;p=q->next;
while(p&&p->value!=value){
q=p;
p=p->next;
}
if(p){// if , ?
q->next=p->next;
free(p);
}
return head;
}
오늘 은 여기까지 입 니 다. 저도 어 리 석 은 링크 지식 으로 학교 프로젝트 를 하 러 가 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
하나의 단일 체인 테이블의 순환과 귀속 실현을 반전시키다텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.