[데이터 구조] 링크 의 실현 (선두 노드)

5210 단어 데이터 구조
링크 는 물리 적 저장 장치 에서 비 연속 적 이 고 비 순서 적 인 저장 구조 로 데이터 요소 의 논리 적 순 서 는 링크 의 포인터 링크 순 서 를 통 해 이 루어 진다.링크 는 일련의 노드 로 구성 되 고 모든 노드 는 데이터 필드 와 지침 도 메 인 을 포함한다.여 기 는 선두 결점 의 체인 시계 입 니 다.
  • 결점 구조 체 정의
  • typedef struct Linklist{
    	int data;// int        
    	struct Linklist *next;
    }LL;
    
  • 링크 의 구축
  • 헤드 삽입 법
  • LL *headcreate_list(int n){
    LL *p,*q;
    p=NULL;
    srand(time(0));
    for(int i=0;i<=n;i++){
    	q=(LL *)malloc(sizeof(LL));
    	q->data=rand()/1000;
    	q->next=p;
    	p=q;
    } 
    return p;
    

    } - C++ LL *create_list (int n) {LL * p, r, q; p = (LL) malloc (sizeof (LL)); p - > next = NULL; r = p; srand (time (0); for (int i = 1; i < = n; i + +) {q = (LL) malloc (sizeof (LL); q - > data = rand () / 1000; q - > next = r - > next = q; r - > next = q;} return p; / p 는 헤드 노드} ` ` ` `
  • 링크 요소 의 삽입
  • LL *insert_list(LL *p,int place,int e){
    	LL *q,*s;int j;
    	q=p;j=1;
    	while(jnext;
    		j++;
    	}
    	s=(LL*)malloc(sizeof(LL));
    	s->data=e;
    	s->next=q->next;
    	q->next=s;
    	return p;
    }
    
  • 링크 요소 의 삭제
  • LL *delete_list(LL *p,int place){
    	int e,j=1;
    	LL *q,*r;
    	q=p;
    	while(jnext;
    		j++;
    	}
    	e=q->next->data;
    	printf("       :%d
    ",e); r=q->next; q->next=q->next->next; free(r); return p; }
  • 체인 테이블 의 위 치 를 찾 습 니 다
  • int LOCATE (LL *p,int e){
    	int i;
    	LL *q;
    	if(p){
    		i=1;
    		q=p->next;
    		while(q){
    			if(q->data==e) return i;
    			i++;
    			q=q->next;
    		}
    	}
    	return 0;
    }
    
  • 링크 길이 구하 기
  • int LENGTH(LL *p){
    	LL *q;
    	int n=0;
    	if(p){
    		q=p->next;
    		while(q){
    			n++;
    			q=q->next;
    		}
    	}
    	return n;
    }
    
  • 링크 역 치
  • LL *nizhi(LL *head){ //      
    	LL *p,*pnext;
    	p=head->next;
    	head->next=NULL;
    	while(p){
    		pnext=p->next;
    		p->next=head->next;
    		head->next=p;
    		p=pnext;
    	}
    	return head;
    } 
    
  • 링크 인쇄
  • void print_list(LL *p){
    	LL *q;
    	q=p->next;
    	if(!q) printf("Empty list.");
    	else while(q){
    		printf("%d ",q->data);
    		q=q->next;
    	}
    	printf("
    "); }

    전체 코드 구현:
    #include
    #include
    #include
    #include
    typedef struct Linklist{
    	int data;
    	struct Linklist *next;
    }LL;
    
    LL *create_list(int n);//         
    
    LL *headcreate_list(int n);//         
    
    void print_list(LL *p);//     
    
    LL *insert_list(LL *p,int place,int e);// e  place  
    
    LL *delete_list(LL *p,int place);// place     
    
    int LOCATE(LL *p,int e);//     
    
    int LENGTH(LL *p); //       
    
    LL *nizhi(LL *p); //       
    
    int main(){
    	LL *head;
    	int e,n,place1,place2;
    	printf("           :
    "); scanf("%d",&n); //head=create_list(n); head=headcreate_list(n); printf(" :
    "); print_list(head); printf(" :
    "); scanf("%d %d",&place1,&e); printf(" :
    "); head=insert_list(head,place1,e); print_list(head); printf(" :
    "); scanf("%d",&place2); head=delete_list(head,place2); printf(" :
    "); print_list(head); printf(" :") ; int ha; scanf("%d",&ha); int pl=LOCATE(head,ha); printf(" %d
    ",pl); int shu=LENGTH(head); printf(" %d
    ",shu); head=nizhi(head); printf("

    "); printf(" :
    "); print_list(head); return 0; } LL *create_list(int n){ LL *p,*r,*q; p=(LL*)malloc(sizeof(LL)); p->next=NULL; r=p; srand(time(0)); for(int i=1;i<=n;i++){ q=(LL*)malloc(sizeof(LL)); q->data=rand()/1000; q->next=r->next; r->next=q; r=q; } return p;//p } void print_list(LL *p){ LL *q; q=p->next; if(!q) printf("Empty list."); else while(q){ printf("%d ",q->data); q=q->next; } printf("
    "); } LL *insert_list(LL *p,int place,int e){ LL *q,*s;int j; q=p;j=1; while(jnext; j++; } s=(LL*)malloc(sizeof(LL)); s->data=e; s->next=q->next; q->next=s; return p; } LL *delete_list(LL *p,int place){ int e,j=1; LL *q,*r; q=p; while(jnext; j++; } e=q->next->data; printf(" :%d
    ",e); r=q->next; q->next=q->next->next; free(r); return p; } LL *headcreate_list(int n){ LL *p,*q; p=NULL; srand(time(0)); for(int i=0;i<=n;i++){ q=(LL *)malloc(sizeof(LL)); q->data=rand()/1000; q->next=p; p=q; } return p; } int LOCATE (LL *p,int e){ int i; LL *q; if(p){ i=1; q=p->next; while(q){ if(q->data==e) return i; i++; q=q->next; } } return 0; } int LENGTH(LL *p){ LL *q; int n=0; if(p){ q=p->next; while(q){ n++; q=q->next; } } return n; } LL *nizhi(LL *head){ // LL *p,*pnext; p=head->next; head->next=NULL; while(p){ pnext=p->next; p->next=head->next; head->next=p; p=pnext; } return head; }

    좋은 웹페이지 즐겨찾기