단일 체인 시트 의 기본 동작 (삽입 및 삭제) 에 대한 상세 한 해답

11218 단어 데이터 구조
단일 체인 시트 의 구조 체 를 정의 합 니 다.
typedef struct Node{
    ElemType data;  //     
    struct Node *next;  //      
}Linklist  //       

단일 링크 의 삽입 작업: (예 를 들 어 단일 링크 L 의 i 번 째 위치 에 새로운 데이터 요소 e 를 삽입 하거나 i 번 째 위치 에 새로운 데이터 요소 e 를 삽입 하 는 것 은 모두 같은 뜻 이 고 자신 이 천천히 생각 하 는 것) 다음 에 단계별 로 조작 합 시다.
  • 두 번 째 결점 찾기 (실제 출력 된 p 는 i 의 앞 결점 을 가리 키 고 p - > next 가 i 의 결점 을 가리 키 는 것)
  • Status ListInsert(LinkList *L ,int i,Elemtype e){
    	int j;
    	LinkList p;
    	p = *L;//p         ,p = head
    	j = 1;
    	
    	while(p && j<i){   
    		p = p->next;
    		j++;//  j++ ++j      
    	}//        p,    2      ,i=2    ,p         ,p->next         
    	
    	if(!p || j>i){//            
    		return ERROR;
    	}
    
    }
    
  • 요소 삽입 e
  • LinkList s;
    s = (LinkList)malloc(sizeof(Node));
    s->data = e;
    
    s->next = p->next;
    p->next = s;
    

    병합 (단일 링크 삽입):
    Status ListInsert(LinkList *L ,int i,Elemtype e){
    	int j;
    	LinkList p,s;
    	p = *L;//p         ,p = head
    	j = 1;
    	
    	while(p && j<i){   
    		p = p->next;
    		j++;//  j++ ++j      
    	}//        p,    2      ,i=2    ,p         ,p->next         
    	
    	if(!p || j>i){//            
    		return ERROR;
    	}
    	s = (LinkList)malloc(sizeof(Node));
    	s->data = e;
    
    	s->next = p->next;
    	p->next = s;
    	return bingo;
    }
    

    단일 링크 의 삽입 작업: (예 를 들 어 단일 링크 L 에서 노드 L 을 삭제 하고 i 노드 의 값 을 출력 합 니 다) 또한 두 단계 로 나 누 어 작업 합 니 다.
  • 두 번 째 노드 찾기 (삽입 작업 과 마찬가지 로 코드 는 더 이상 표시 되 지 않 지만 실제 출력 p 에 주의해 야 합 니 다. i 의 이전 노드 를 가리 키 는 것 입 니 다. p - > next 가 i 의 결점 을 가리 키 는 것 입 니 다)
  • i 번 째 노드 삭제
  • p = p->next->next;
    *e = p-next-data;
    free(p-next);
    

    숫자 하나 빌려 쓸 수도 있어 요.
    Linklist q;
    q = p->next;
    p->next = q->next;
    *e = p-next-data;
    free(p-next);
    

    병합 (단일 링크 삭제):
    Status ListInsert(LinkList *L ,int i,Elemtype *e){
    	int j;
    	LinkList p,q;
    	p = *L;//p         ,p = head
    	j = 1;
    	
    	while(p && j<i){   
    		p = p->next;
    		j++;//  j++ ++j      
    	}//        p,    2      ,i=2    ,p         ,p->next         
    	
    	if(!p || j>i){//            
    		return ERROR;
    	}
    	q = p->next;
    	p->next = q->next;
    	
    	*e = p-next-data;
    	free(p-next);
    	
    	return bingo;
    }
    

    좋은 웹페이지 즐겨찾기