단순 구조

링크: 링크 와 배열 은 어느 정도 유사 성 이 있 지만 어느 정도 차이 가 있 습 니 다.배열 은 옮 겨 다 니 는 것 을 찾 는 데 빠 르 고 간단 합 니 다. 배열 은 다음 표 색인 을 통 해 찾 습 니 다.링크 는 삽입 삭제 에 있어 서 편리 하고 간단 하 다.배열 은 삽입 에 있어 서 많은 데 이 터 를 이동 해 야 하 며, 링크 는 색인 을 수정 하면 쉽게 도달 할 수 있다.
링크 길이 알고리즘 가 져 오기
public int getSize() {
		
		int num = 0;
		if(head==null){//   
			
		}else{ //    
			num++;//     
			Node node=head.getNaxt(); //         
			while(node!=null){//    
				num++;//     
				node=node.getNaxt();//      
			}
		}
		return num;
	}

 노드 추가 방법: 두 결점 여 부 를 판단 해 야 합 니 다.
	@Override
	/**
	 *             
	 */
	public void add(String date) {
		Node node =new Node(date,null);
		if(getSize()==0){//      
			head=node;
		}else{
			Node node1=get(getSize()-1);
			node1.setNaxt(node);
		}

	}
	/**
	 *            
	 */
	@Override
	public void add(int index, String date) {
		Node node =new Node(date,null);
		if(index<0||index>getSize()){//  
			try {
				throw new Exception("  ");
			} catch (Exception e) {
				e.printStackTrace();
			}
		}else if(index==0){//              
			node.setNaxt(head);
			head=node;
		}else{//           
			Node node1=get(index-1);
			Node node2=get(index);
			node.setNaxt(node2);
			node1.setNaxt(node);
		}
		
	}

 노드 삭제 방법 은 삭제 할 노드 가 링크 에 있 는 지 판단 해 야 합 니 다.
	/**
	 *            
	 */
	@Override
	public void del(String date) {
		int i=fint(date);
		if(i!=-1){//             
			get(i-1).setNaxt(get(i+1));//    
		}
		
	}
	/**
	 *          
	 */
	@Override
	public void del(int intdex) {
		if(intdex<0||intdex>getSize()){//    
			try {
				throw new Exception("  ");
			} catch (Exception e) {
				e.printStackTrace();
				return;
			}
		}
		//    
		Node node1=get(intdex-1);
		Node node2=get(intdex+1);
		node1.setNaxt(node2);
	}

 노드 찾기 방법: 링크 가 비어 있 는 지, 노드 가 링크 에 있 는 지 판단 해 야 합 니 다.
/**
	 *          
	 */
	public String fint(int intdex) {
	
		return get(intdex).getData();//            
	}
	/**
	 *            
	 */
	public int fint(String deta) {
		int num=0;
		Node node=head;
		if(node.getData().equals(deta)){//              
			return num;//     
		}
		while(!node.getData().equals(deta)&&node.getNaxt()!=null){//        
			num++;
			node=node.getNaxt();
		}
		
		if(num==getSize()&&!node.getData().equals(deta)){//          
			try {
				throw new Exception("         ");
			} catch (Exception e) {
				e.printStackTrace();
			}
			return -1;
		}
		else 
			return num;
	}

 특정한 노드 를 가 져 오 는 방법 은 링크 작업 의 핵심 위치 에 속 하 는 것 은 다른 방법의 기초 이다. 링크 가 비어 있 는 지, 색인 이 경 계 를 넘 었 는 지 판단 해 야 할 뿐만 아니 라
/**
	 *           
	 */
	public Node get(int intdex){//
		if(intdex<0){//    
			 try {
				throw new Exception("    ");
			} catch (Exception e) {
				e.printStackTrace();
				return null;
			}
		}
		int count = 0;
		//   index 0   ,        
		if (count == intdex) {//     
			return head;
		}
		//            
		if (intdex < getSize()) {
			//          ,           
			Node node = head.getNaxt();
			while (node != null) {
				count++;
				if (count == intdex) {
					return node;
				}
				node = node.getNaxt();
			}
		} else {
			//          ,     
			try {
				throw new Exception("    ");
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return null;
	}

 
 
 
 
두 갈래 나무:
미리 설 치 된 이 진 트 리 를 만 드 는 것 은 본질 적 으로 링크 를 실현 하 는 것 과 차이 가 많 지 않 습 니 다. 노드 에 색인 '포인터' 를 하나 더 추가 하 는 것 일 뿐 입 니 다. 먼저 모든 노드 를 하나의 고립 된 노드 로 예화 한 다음 에 일정한 순 서 를 통 해 노드 를 연결 합 니 다.이렇게 간단 한 이 진 트 리 를 만 들 수 있 습 니 다. 이 진 트 리 중에서 이 진 트 리, 완전 이 진 트 리 는 상대 적 으로 간단 합 니 다. 그러나 일반적인 이 진 트 리 는 어느 정도 어려움 이 있 습 니 다. 중간 어 딘 가 에 있 는 노드 의 득 도 는 1 입 니 다. 이것 은 매우 골 치 아 프 지만 우 리 는 이 를 완전 이 진 트 리 로 생각 하여 구축 할 수 있 습 니 다.도가 1 인 노드 에 특수 한 표지 로 빈 노드 와 이 노드 의 서브 트 리 를 대표 합 니 다.완전 이 진 트 리 를 만 들 때 우 리 는 모든 부모 노드 를 따로 나 올 수 있다. 그 중에서 마지막 부모 노드 는 부모 노드 에서 따로 나 와 마지막 (두) 개의 잎 을 처리 할 수 있다.
/**
	 *      
	 */
	public void creadTree( ){
		//      
		for(int i=0;i<array.length;i++){
			TreeNode tNode=new TreeNode(array[i],null,null);
			list.add(tNode);
		} 
		//      ,           
		for(int i=0;i<list.size()/2-1;i++){
			//        
			list.get(i).setLNode(list.get(i*2+1));
			//        
			list.get(i).setRNode(list.get(i*2+2));
		}
		//                
		list.get(list.size()/2-1).setLNode(list.get((list.size()/2-1)*2+1));
		//            
		if((list.size()/2-1)*2+2<list.size()){
			list.get(list.size()/2-1).setLNode(list.get((list.size()/2-1)*2+2));
		}
	}

 나무의 역 주 행 은 재 귀 를 통 해 가장 간단 한 방법 이지 만 재 귀 에서 일정한 처리 재 귀 출구 이다.

좋은 웹페이지 즐겨찾기