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; }

오늘 은 여기까지 입 니 다. 저도 어 리 석 은 링크 지식 으로 학교 프로젝트 를 하 러 가 겠 습 니 다.

좋은 웹페이지 즐겨찾기