옹케C 언어 진급, 체인 리스트의 학습 노트(一)

체인 테이블의 학습 교실 링크
https://www.icourse163.org/learn/ZJU-200001?tid=1207389210#/learn/content?type=detail&id=1212809729&cid=1216239425
1. 체인 시계의 구축
#include 
#include 
#include "node.h"
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
typedef struct _node{
     
	int value;
	struct _node *next;
}Node; 
Node* add(Node *head,int number); 
int main(int argc, char *argv[])
{
     
    Node *head=NULL;//   
	int number;
	do{
     
		scanf("%d",&number);
		if(number!=-1){
     
			//add to linked-list
			Node *p=(Node*)malloc(sizeof(Node));
			p->value=number;
			p->next=NULL; 
			find the last
			Node *last=head;
			if(last){
     
				while(last->next){
     //   last->next=NULL  ,              
				last=last->next;
				}
			last->next=p;
			}else{
     
				head=p;
			} 
		}
	}while(number!=-1);
	printf("%d",head->value);//                ,           
	return 0;
}

2. 함수로 봉인
#include 
#include 
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
typedef struct _node{
     
	int value;
	struct _node *next;
}Node; 
Node* add(Node *head,int number); 
int main(int argc, char *argv[])
{
     
	Node *head=NULL;
	int number;
	do{
     
		scanf("%d",&number);
		if(number!=-1){
     
		head=add(head,number);
		}
	}while(number!=-1);
	printf("%d",head->value);
	return 0;
}
Node* add(Node *head,int number)
{
     
	Node *p=(Node*)malloc(sizeof(Node));
		p->value=number;
		p->next=NULL; 
		Node *last=head;
		if(last){
     
			while(last->next){
     
			last=last->next;
			}
		last->next=p;
		}else{
     
			head=p;
		}
		return head;//  :  3、void add(Node **head,int number)                
}

4. 장점을 다시 개선한다. 우리가 정의한 데이터list를 사용하여 전체 체인 테이블을 대표하고 나중에 수정하기 편리하다.eg: 체인 테이블 저장을 항상 첫 번째부터 검색하지 않고 마지막 번째부터 저장할 수 있도록 데이터를 정의할 수 있다
#include 
#include 
typedef struct _node{
     
	int value;
	struct _node *next;
}Node; 
typedef struct _list{
     
	Node* head;
}List; 
void * add(List *list,int number);
int main(int argc, char *argv[])
{
     
	List list;
	list.head=NULL;
	int number;
	do{
     
		scanf("%d",&number);
		if(number!=-1){
     
	    add(&list,number);
		}
	}while(number!=-1);
	printf("%d",list.head->value);
	return 0;
}
void * add(List *list,int number)
{
     
	Node *p=(Node*)malloc(sizeof(Node));
		p->value=number;
		p->next=NULL; 
		//find the last
		Node *last=list->head;
		if(last){
     
			while(last->next){
     
			last=last->next;
			}
		last->next=p;
		}else{
     
		list->head=p;
		}
}

5. 4의 예를 실현하는 것이다
#include 
#include 
#include "node.h"
typedef struct _list{
     
	Node* head;
	Node* tail;
}List; 
void * add(List *list,int number);
int main(int argc, char *argv[])
{
     
	List list;
	list.head=NULL;
	list.tail=NULL;
	int number;
	do{
     
		scanf("%d",&number);
		if(number!=-1){
     
	    add(&list,number);
//		head=add(head,number);
		}
	}while(number!=-1);
	printf("%d",list.tail->value);
	return 0;
}

void * add(List *plist,int number)
{
     
	Node *p=(Node*)malloc(sizeof(Node));
		p->value=number;
		p->next=NULL; 
		//find the last
		Node *last=plist->tail;
		if(last){
     
//			while(last->next){
     
//			last=last->next;
//			}
		last->next=p;
		plist->tail=p;
		}else{
     
		plist->head=p;
		plist->tail=p;
		}
}

체인 시계의 학습(二)

좋은 웹페이지 즐겨찾기