Java 언어 기반 데이터 구조의 코드 구현

리소스 다운로드 주소 : https://download.csdn.net/download/sheziqiong/88294611
리소스 다운로드 주소 : https://download.csdn.net/download/sheziqiong/88294611

소개

이 프로젝트는 Java 언어를 기반으로 한 데이터 구조의 코드 구현으로, 모든 고전적인 데이터 구조 알고리즘을 포함하고 잘 주석 처리되어 있어 데이터 구조를 이해하고 학습하는 데 매우 적합합니다. 또한 스윙으로 표시되고 데이터 구조 알고리즘의 관련 개념을 적용하는 연락처 저장 도구(전화번호부)도 포함되어 있습니다. 도움이 되셨다면 팔로우 부탁드려요 O

구조

  • array – 배열 및 일반화된 테이블

  • 그래프-그래프

  • 목록 - 선형 목록

  • 전화번호부 – 포괄적인 애플리케이션(데이터 구조를 사용하여 연락처 저장 소프트웨어 구현)

  • 검색-찾기

  • 정렬-정렬

  • stackqueue – 스택과 큐

  • 문자열 - 문자열

  • 나무 – 나무

  • leetcode_agorithm leetcode 알고리즘 예제 문제 해결

데이터 에이전시

선형 테이블

선형 테이블은 가장 기본적이고 단순하며 가장 일반적으로 사용되는 데이터 구조입니다. 선형 테이블의 데이터 요소 간의 관계는 일대일 관계입니다. 즉, 첫 번째와 마지막 데이터 요소를 제외하고 다른 데이터 요소는 끝에서 끝까지 연결됩니다(이 문장은 대부분의 선형 테이블에만 적용됩니다. 예를 들어 순환 연결 목록은 논리 수준(저장소 수준의 연결 저장소)에서도 선형 목록이지만 마지막 데이터 요소의 꼬리 포인터는 센티넬 노드를 가리킵니다.

여기에 이미지 설명을 삽입하세요.

  • SeqList 는 배열을 사용하여 구현된 단일 연결 리스트이며 시간 복잡도는 다음과 같습니다.
    • 색인:O(1)
    • 찾다:O(n)
    • 끼워 넣다:O(n)
    • 제거하다:O(n)

여기에 이미지 설명을 삽입하세요.

  • SinglyLinkedList 는 헤드 노드로 구성된 단일 연결 리스트로, 노드(Node)로 구성된 선형 집합이며, 각 노드는 포인터를 사용하여 다른 노드를 가리킬 수 있습니다. 시간 복잡도는 다음과 같습니다.

    • 색인:O(n)
    • 찾다:O(n)
    • 끼워 넣다:O(1)
    • 제거하다:O(1)

    여기에 이미지 설명을 삽입하세요.

  • SortedSinglyLinkedList 는 정렬 가능한 단일 연결 목록으로, 추가된 요소는 Comparable 인터페이스를 구현해야 합니다.

  • PolySLinkedList는 정렬하여 다른 연결 목록에 추가할 수 있는 데이터 구조로, Addible 인터페이스를 구현합니다.

스택과 큐

스택은 요소의 선입선출(first-in-last-out) 모음입니다. 여기서 푸시는 스택에 밀어넣는 것을 의미하고 팝은 스택에서 튀어나오는 것을 의미합니다.
큐는 요소의 선입선출(FIFO) 모음입니다. 여기서 엔큐는 큐에 들어가는 것을 의미하고 큐에서 빼는 것은 큐를 떠나는 것을 의미합니다.

여기에 이미지 설명을 삽입하세요.

  • SeqQueue는 배열을 사용하여 대기열 구조를 구현하며 시간 복잡도는 다음과 같습니다.
    • 대기열에 추가:O(1)
    • 대기열에서 빼기:O(1)
  • LinkedQueue는 연결된 목록을 사용하여 구현된 대기열 구조입니다.

여기에 이미지 설명을 삽입하세요.

  • PriorityQueue 우선순위 큐, 우선순위가 높은 요소가 먼저 큐에서 제거됩니다.
  • SeqStack은 배열을 사용하여 구현된 스택 구조입니다.
    • 푸시:O(1)
    • 팝:O(1)
  • LinkedStack은 연결된 목록을 사용하여 구현된 스택 구조입니다.

문자열은 0개 이상의 문자로 구성된 유한 시퀀스이며 문자열이라고도 합니다.

  • MyString은 문자열 구조를 시뮬레이션합니다.
  • MyStringBuffer는 변경 가능한 문자열 구조를 시뮬레이션합니다.

배열 및 일반화된 테이블

배열은 동일한 유형이지만 첨자가 다른 일련의 변수로 구성된 데이터 구조입니다. 일반화된 테이블의 요소 값은 비원자적이며 분해될 수 있습니다. 테이블의 요소는 선형일 수도 있습니다. 테이블 및 모든 데이터 요소는 여전히 동일한 데이터 유형에 속합니다.

  • GenList 이중 사슬 구조 의 일반화된 목록
  • DownTriangleMatrix 선형 압축으로 저장된 하부 삼각 행렬
  • 교차 연결 목록에 저장된 CrossLinkedSparseMatrix 계수 행렬
  • LinkedSparseMatrix 삼중 행의 단일 연결 목록에 저장된 계수 행렬
  • 행렬(Matrix) 은 배열을 이용하여 저장된 행렬구조이다.
  • SeqSparseMatrix 는 희소 행렬 트리플의 시퀀스 테이블에 저장된 행렬 구조입니다.

나무

덴드로그램은 n(n>=1)개의 제한된 노드로 구성된 계층적 관계의 모음인 데이터 구조입니다. 거꾸로 된 나무처럼 보이기 때문에 "나무"라고 불립니다. 이는 뿌리가 위를 향하고 잎이 아래를 향하고 있음을 의미합니다.

  • 트리 구조, 각 노드에는 하위 노드와 형제 노드가 포함됩니다.

  • BinaryTree 이진 트리, 각 노드에는 왼쪽 자식 노드와 오른쪽 자식 노드가 포함됩니다.

    여기에 이미지 설명을 삽입하세요.

  • CompleteBinaryTree 는 완전한 이진 트리로, 마지막 레벨을 제외하고 각 레벨의 노드 수가 최대치에 달하며, 마지막 레벨에서는 오른쪽에 있는 몇 개의 노드만 누락됩니다.

완전 이진 트리(Full Binary Tree): 하위 노드가 없는 마지막 수준을 제외하고 각 수준의 모든 노드가 두 개의 하위 노드를 갖는 이진 트리입니다.

여기에 이미지 설명을 삽입하세요.

  • ThreadBinaryTree 순차 단서 이진 트리는 순차 순회하며, 각 노드의 왼쪽 자식이 비어 있으면 이전 노드를 가리키고, 오른쪽 자식이 비어 있으면 후속 노드를 가리킵니다.

그림

그래프는 데이터 요소 간에 다대다 관계가 있는 데이터 구조입니다.

  • 무방향 그래프: 무방향 그래프에는 대칭 인접 행렬이 있으므로 노드 u에서 노드 v까지의 간선이 있고 그 반대의 경우 v에서 u까지의 간선도 존재합니다.
  • 유방향 그래프: 유향 그래프의 인접 행렬은 비대칭입니다. 즉, u에서 v까지의 간선이 있다고 해서 v에서 u까지의 간선이 있어야 한다는 의미는 아닙니다.

여기에 이미지 설명을 삽입하세요.

  • AdjMatrixGraph는 인접 행렬로 표현되는 가중치 그래프 데이터 구조입니다.
  • AdjListGraph 는 인접 목록으로 표현되는 가중치 그래프 데이터 구조입니다.

여기에 이미지 설명을 삽입하세요.

정렬하다

삽입 정렬

  • 직접 삽입 정렬(안정적)

여기에 이미지 설명을 삽입하세요.

  • 힐 정렬(불안정)

여기에 이미지 설명을 삽입하세요.

교환 정렬

  • 버블 정렬(안정적)

여기에 이미지 설명을 삽입하세요.

  • 퀵 정렬(불안정)의 시간 복잡도는 다음과 같습니다.
    • 최적의 시간: O(nlog(n))

    • 최악의 시간: O(n^2)

    • 평균 시간: O(nlog(n))

      여기에 이미지 설명을 삽입하세요.

선택 정렬

  • 직접 선택 정렬(불안정)

    여기에 이미지 설명을 삽입하세요.

  • 힙 정렬(불안정)은 스택 트리(힙)의 데이터 구조를 이용하여 설계된 정렬 알고리즘으로, 선택 정렬의 한 종류입니다. 배열의 특성을 사용하여 지정된 인덱스에서 요소를 빠르게 찾을 수 있습니다. 힙은 큰 루트 힙과 작은 루트 힙으로 나누어지며 이는 완전한 이진 트리입니다. 큰 루트 힙의 요구 사항은 각 노드의 값이 해당 상위 노드의 값, 즉 A[PARENT[i]] >= A[i]보다 크지 않아야 한다는 것입니다. 배열의 비내림차순 정렬에서는 큰 루트 힙의 요구 사항에 따라 가장 큰 값이 힙의 맨 위에 있어야 하기 때문에 큰 루트 힙을 사용해야 합니다. 시간 복잡도는 다음과 같습니다.

    • 최적의 시간: O(nlog(n))

    • 최악의 시간: O(nlog(n))

    • 평균 시간: O(nlog(n))

      여기에 이미지 설명을 삽입하세요.

  • 병합 정렬(안정적) 병합 정렬은 분할 정복 개념을 사용하며, 배열을 연속적으로 두 부분으로 나누고 왼쪽 하위 배열과 오른쪽 하위 배열을 각각 정렬한 다음 두 배열을 새로운 배열로 병합합니다. 정렬된 배열. 시간 복잡도는 다음과 같습니다.

    • 최적의 시간: O(nlog(n))

    • 최악의 시간: O(nlog(n))

    • 평균 시간: O(nlog(n))

      여기에 이미지 설명을 삽입하세요.

찾다

  • BinarySortTree 는 특별한 이진 트리입니다. 각 노드에 대해 왼쪽 자식 아래의 모든 노드의 값은 오른쪽 자식 아래의 모든 노드의 값보다 작아야 합니다. 구성 프로세스는 다음과 같습니다.

    여기에 이미지 설명을 삽입하세요.

  • HashSet은 체인 주소 방식의 해시 테이블 데이터 구조를 채택하고 내부적으로 SinglyLinkedList 배열을 사용하여 요소를 저장합니다.

    여기에 이미지 설명을 삽입하세요.

해싱 관련: 일반적인 선형 테이블 및 트리에서는 구조 내 레코드의 상대적 위치가 랜덤하므로 구조 내 레코드 검색 시 키워드를 통한 일련의 비교가 필요하다. 이상적인 상황은 필요한 레코드를 직접 찾을 수 있는 것이므로 레코드의 저장 위치와 해당 키 사이에 특정 대응 관계가 설정되어 각 키가 구조의 고유한 저장 위치에 해당하도록 해야 합니다.

충돌 해결:

  • 링크방식(지퍼방식). 동일한 해시 주소를 가진 레코드를 선형 연결 리스트에 저장합니다. 예를 들어, 나머지로 나누기 방법에서 키워드를 (18,14,01,68,27,55,79)로 하고 제수를 13으로 둡니다. 해시 주소는 (5,1,1,3,1,3,1)입니다.
  • 오픈 주소 방식 오픈 주소 방식은 새로운 값이 삽입되면 해당 값에 해당하는 해시 버킷이 존재하는지 판단하고, 존재할 경우 특정 알고리즘에 따라 다음으로 가능한 위치를 순차적으로 선택하여 아직 점유되지 않은 주소가 발견되었습니다. . 소위 오픈 주소 방법은 요소의 위치가 항상 해시 값에 의해 결정되는 것은 아니라는 의미이기도 합니다.

리소스 다운로드 주소 : https://download.csdn.net/download/sheziqiong/88294611
리소스 다운로드 주소 : https://download.csdn.net/download/sheziqiong/88294611

추천

출처blog.csdn.net/newlw/article/details/132654184