단일 체인 시트 작성 (자바 언어 설명)
40554 단어 #
데이터 구조의 논 리 는 4 가지 유형 을 나타 낸다. (1) 집합: 요소 간 무관 (2) 선형: 요소 간 1 - > 1 의 관계 (3) 트 리: 요소 간 1 - > many 의 관계 (4) 그림: 요소 간 many - > many 의 관계
가장 기본 적 인 선형 구조의 간단 한 논 리 는 선형 표 라 고 불 리 며 선형 표 의 물리 구 조 는 보통 순서 표 와 링크 두 가지 가 있다.순서 표 의 기본 적 인 실현 은 지난 블 로그 에서 간단 한 링크 를 썼 다.
선형 표 인터페이스
public interface ListInterface<T> {
/**
*
*/
void printList();
/**
*
* @return
*/
int length();
/**
*
* @param element
* @return
*/
int locate(T element);
/**
*
* @param i
* @return
* @throws ListException
*/
T getElement(int i) throws ListException;
/**
*
* @param i
* @param element
* @throws ListException
*/
void insert(int i, T element) throws ListException;
/**
*
* @param i
* @return
* @throws ListException
*/
T delete(int i) throws ListException;
/**
*
* @return
*/
boolean isEmpty();
}
이상 류
public class ListException extends RuntimeException {
private static final long serialVersionUID = 1L;
public ListException() {}
public ListException(String message) {
super(message);
}
}
링크 노드 정의
public class LinkedNode<T> {
private T data;
private LinkedNode<T> next;
public LinkedNode() {
this.data = null;
this.next = null;
}
public LinkedNode(T element) {
this.data = element;
this.next = null;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
public LinkedNode<T> getNext() {
return next;
}
public void setNext(LinkedNode<T> next) {
this.next = next;
}
}
첨삭 의 편 의 를 위해 서 우 리 는 두 결점 을 정의 했다.두 결점 은 체인 테이블 이 가지 고 있 고 뒤의 각 결점 간 의 연결 은 지침 (인용) 을 통 해 진행 되 며 각 결점 은 다음 결점 의 인용 을 가지 고 있다.
단일 체인 테이블 프로 그래 밍 실현
public class LinkedList<T> implements ListInterface<T> {
private LinkedNode<T> first;
public LinkedList() {
first = new LinkedNode<T>();
}
//
// public LinkedList(T[] init) {
// first = new LinkedNode();
// for (int i = 0; i < init.length; i++) {
// LinkedNode node = new LinkedNode<>(init[i]);
// node.setNext(first.getNext());
// first.setNext(node);
// }
// }
//
public LinkedList(T[] init) {
first = new LinkedNode<T>();
LinkedNode<T> rear = first;
for (int i = 0; i < init.length; i++) {
LinkedNode<T> node = new LinkedNode<>(init[i]);
rear.setNext(node);
rear = node;
}
}
@Override
public void printList() {
LinkedNode<T> p = first.getNext();
while(p != null) {
System.out.println(p.getData() + " ");
p = p.getNext();
}
}
@Override
public int length() {
int length = 0;
LinkedNode<T> p = first.getNext();
while(p != null) {
p = p.getNext();
length++;
}
return length;
}
@Override
public int locate(T element) {
LinkedNode<T> p = first.getNext();
int count = 1;
if (element == null) {
while (p != null) {
if (p.getData() == null) {
return count;
}
p = p.getNext();
count++;
}
} else {
while (p != null) {
if (p.getData().equals(element)) {
return count;
}
p = p.getNext();
count++;
}
}
return 0;
}
@Override
public T getElement(int i) throws ListException {
LinkedNode<T> p = first.getNext();
int count = 1;
while (p != null && count < i) {
p = p.getNext();
count++;
}
if (p == null) {
throw new ListException(" ");
}
return p.getData();
}
@Override
public void insert(int i, T element) throws ListException {
LinkedNode<T> p = first;
int count = 1;
while (p != null && count < i) {
p = p.getNext();
count++;
}
if (p == null) {
throw new ListException(" ");
}
LinkedNode<T> node = new LinkedNode<>(element);
node.setNext(p.getNext());
p.setNext(node);
}
@Override
public T delete(int i) throws ListException {
LinkedNode<T> p = first.getNext();
int count = 1;
while (p != null && count < i-1) {
p = p.getNext();
count++;
}
if (p == null || p.getNext() == null) {
throw new ListException(" ");
}
LinkedNode<T> q = p.getNext();
T deleteNode = q.getData();
p.setNext(q.getNext());
return deleteNode;
}
@Override
public boolean isEmpty() {
if (first.getNext() == null) {
return true;
}
return false;
}
}
머리 삽입 법 과 꼬리 삽입 법 은 배열 매개 변수 구조 기 를 실현 하 는 서로 다른 실현 방법 으로 충돌 하기 때문에 설명 되 었 다.
테스트
public class ListTester {
public static void main(String[] args) {
String[] initialList = {"a", "b", "c", "d", "e", "f"};
ListInterface<String> list = new LinkedList<>(initialList);
System.out.println(" " + list.length());
System.out.println(" :");
list.printList();
String list_2 = list.getElement(2);
System.out.println("2 :" + list_2);
int locate_d = list.locate("d");
System.out.println(" d :" + locate_d);
System.out.println(" 3 k");
list.insert(3, "k");
String list_3 = list.getElement(3);
System.out.println("3 :" + list_3);
System.out.println(" :" + list.length());
System.out.println(" :");
list.printList();
System.out.println(" 3 ");
String deleteElement = list.delete(3);
System.out.println(" :" + deleteElement);
System.out.println(" :" + list.length());
System.out.println(" :");
list.printList();
}
}
테스트 결과
6
:
a
b
c
d
e
f
2 :b
d :4
3 k
3 :k
:7
:
a
b
k
c
d
e
f
3
:k
:6
:
a
b
c
d
e
f
이렇게 해서 간단 한 단일 체인 표 는 체인 표 의 구체 적 인 지식 과 모든 방법 에 대한 상세 한 분석 을 완성 했다. 여기 서 일일이 설명 하지 않 는 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Rails Turbolinks를 페이지 단위로 비활성화하는 방법원래 Turobolinks란? Turbolinks는 링크를 생성하는 요소인 a 요소의 클릭을 후크로 하고, 이동한 페이지를 Ajax에서 가져옵니다. 그 후, 취득 페이지의 데이터가 천이 전의 페이지와 동일한 것이 있...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.