데이터 구조 - 단 방향 링 링크

27016 단어 데이터 구조
단 방향 링 링크 특징:
1. 마지막 요소 의 next 도 메 인 은 첫 번 째 요소 (first) 2 를 가리 키 고 중간 변 수 를 통 해 링크 를 옮 겨 다 닙 니 다. 만약 에 중간 변수의 next 도 메 인 이 first 와 같 으 면 링크 가 이미 옮 겨 다 녔 음 을 증명 합 니 다.3. 노드 를 추가 합 니 다. first 노드 는 고정 적 으로 변 하지 않 기 때문에 중간 변 수 를 통 해 이동 해 야 합 니 다. 노드 를 링크 의 임 의 위치 에 추가 할 수 있 습 니 다.데이터 사용 클래스
@Data
public class Person {

    private int no;
    private String name;
    private Person next;

    public Person(int no, String name, Person next) {
        this.no = Math.abs(no);
        this.name = name;
        this.next = next;
    }

    @Override
    public String toString() {
        return "Person{" +
                "no=" + no +
                ", name='" + name + '\'' +
                '}';
    }

}

단 방향 링 링크 (조세 프 계산)
@Slf4j
public class SingleCircleLinked {

    private final String NAME = "test_";
    private Person first = null;

    /**
     *            
     * @param num          
     */
    public void addTotal(int num) {
        if (num < 1) {
            log.info("          1");
            return;
        }
        /*    ,        */
        Person cur = null;
        /*   ,        */
        Person person;
        /*          */
        if (first == null) {
            for (int i = 1; i <= num; i++) {
                person = new Person(i, NAME + i, null);
                /*        ,first      */
                if (i == 1) {
                    first = person;
                    first.setNext(person);
                    cur = first;
                    /*       , cur      ,         */
                } else {
                    cur.setNext(person);
                    person.setNext(first);
                    cur = person;
                }
            }
            return;
        }
        /*           */
        /*  cur  ,           */
        cur = first;
        /*    ,       */
        while (true) {
            if (cur.getNext() == first) {
                break;
            }
            cur = cur.getNext();
        }
        /*    */
        for (int i = 1; i <= num; i++) {
            person = new Person(i, NAME + i, null);
            cur.setNext(person);
            person.setNext(first);
            /*         */
            cur = person;
        }
    }

    /**
     *      
     */
    public void show() {
        if (first == null) {
            log.info("    ");
            return;
        }
        /*          ,         */
        Person cur = first;
        /*    */
        while (true) {
            System.out.println(cur);
            /*       next  first,           */
            if (cur.getNext() == first) {
                break;
            }
            cur = cur.getNext();
        }
    }

    /**
     *                    
     *
     * @param startNo                
     * @param num                    
     */
    public void delete(int startNo, int num ) {
        if (first == null) {
            log.info("    ");
            return;
        }
        if (startNo < 1) {
            log.info("        1");
            return;
        }
        if (startNo > this.length()) {
            log.info("             ");
            return;
        }
        /*    ,       first      */
        Person cur = first;
        while (true) {
            /*     first      */
            if (cur.getNext() == first) {
                break;
            }
            cur = cur.getNext();
        }
        /*   , first、cur       */
        for (int i = 0; i < startNo - 1; i++) {
            /*          */
            cur = cur.getNext();
            /*          */
            first = first.getNext();
        }
        while (true) {
            if (cur == first) {
                break;
            }
            for (int i = 0; i < num - 1; i++) {
                /*          */
                cur = cur.getNext();
                /*          */
                first = first.getNext();
            }
            System.out.printf("   = %d,  = %s      
"
,first.getNo(),first.getName()); first = first.getNext(); cur.setNext(first); } System.out.printf(" : = %d, = %s
"
,first.getNo(),first.getName()); } /** * */ public int length() { int i = 0; if (first == null) { return i; } Person cur = first; while (true) { i++; if (cur.getNext() == first) { break; } cur = cur.getNext(); } return i; } }

테스트 클래스
public class SingleCircleLinkedDemo {

    public static void main(String[] args) {
        SingleCircleLinked singleCircleLinked = new SingleCircleLinked();
        singleCircleLinked.addTotal(-1);
        singleCircleLinked.addTotal(10000);
        singleCircleLinked.show();
        singleCircleLinked.delete(1,3);
    }
}

좋은 웹페이지 즐겨찾기