(8) 공통 데이터 구조

 

본 논문 의역에서, 저자에 소유

1976 년 스위스의 컴퓨터 과학자는 책을 썼다 "알고리즘 + 데이터 구조 = 프로그램" . 즉 : 알고리즘 + 자료 구조 = 프로그램. 사십년 후,이 방정식은 여전히 보유하고 있습니다.

당신이 대학 컴퓨터 과학이나 프로그래밍 교육 기관, 당신이 경험을 프로그래밍하는 방법을 수년에 상관없이 출신 여부 코드 얼굴 질문의 많은 후보자에게 데이터 구조의 깊이 이해를 필요로한다. 같은, 때로는 "나에게 이진 트리의 실현주세요"등 직접 데이터 구조를 언급 한 문제에 직면하지만 때로는 그렇게 명확하지 않다 "책을 쓰기 위해 각 저자의 수에 대한 통계."

데이터 구조는 무엇인가?

데이터 구조는 컴퓨터에 저장되어있는 데이터가 구성된다. (이러한 배열로) 특정 데이터 구조에 대해서는 매우 높은 동작 효율 (배열 요소를 판독) 동작의 일부 낮은 효율 (배열 요소를 제거). 프로그래머의 목표는 현재의 문제에 대한 최선의 데이터 구조를 선택하는 것입니다.

왜 우리는 데이터 구조를 필요합니까?

데이터는 프로그램의 핵심 요소이고, 따라서 데이터 구조의 값은 자명하다. 당신에게있는 거 쓰는 프로그램 상관없이, 당신은 직원의 급여, 주가, 식료품 목록이나 전화 번호부 등의 데이터를 처리해야합니다. 다른 시나리오에서, 데이터 요구가 특정 방식에 저장, 우리는 우리의 요구를 충족하기 위해 서로 다른 데이터 구조를 가지고있다.

일반적인 데이터 구조 8가지

  1. 배열
  2. 스택
  3. 명부
  4. 지도
  5. 나무
  6. 접두사 트리
  7. 해시 테이블

1. 배열

배열 (배열) 아마의 가장 간단하고 가장 일반적으로 사용되는 데이터 구조입니다. 이러한 스택 및 큐와 같은 다른 데이터 구조는 어레이에 의해 유도된다.

다음 그림은 네 개의 요소를 가지는 배열을 도시한다 :

디지털 번호로 각 배열 요소의 위치는 첨자 인덱스 (색인)했다. 배열의 첫 번째 요소의 인덱스는 0 대부분의 프로그래밍 언어입니다.

구별 치수, 두 개의 서로 다른 배열이 있습니다

  • 1 차원 배열 (상기와 같이)
  • 다차원 배열 (배열의 배열 요소)

배열의 기본 작동

  • 삽입 - 인덱스에 요소를 삽입
  • 가져 오기 - 요소의 인덱스를 읽어
  • 인덱스에서 요소를 삭제하려면 - 삭제
  • 크기 - 배열의 길이를 가져옵니다

코드 얼굴 질문의 일반적인 배열

2. 스택

철회, 즉, Ctrl + Z는 우리의 가장 일반적인 작업 중 하나는, 대부분의 응용 프로그램은이 기능을 지원합니다. 당신은 그것을 달성하는 방법을 알고? 대답은 이것이다 : (한계 수) 메모리에 저장된 이전의 응용 프로그램 상태, 첫 번째로 가장 최근의 상태입니다. 이 시점에서, 우리는이 기능을 달성하기 위해 스택 (스택)가 필요합니다.

LIFO (최종 먼저 출력)를 이용하여 스택의 요소, 즉 LIFO.

먼저 제거 될 수 있도록도 낮은 스택 상단의 세 요소 (3)를 갖는다 :

스택의 기본 동작

  • 푸시 - 삽입 요소의 스택의 상단
  • 팝 - 스택 요소의 정상에 반환하고 삭제
  • IsEmpty 함수 - 스택이 비어 있는지 여부를 질의
  • 탑 - 스택 요소의 처음으로 돌아 가기, 삭제되지

일반적인 스택 코드의 얼굴 질문

3. 큐

큐 (큐) 스택과 유사한, 데이터를 저장하는 선형 구조이다. 차이는 FIFO 큐를 사용할 때, 상기 스택 LIFO 모드를 사용하는 것을, 즉, FIFO (제 아웃으로).

그림 쇼 다음 큐 최상부 소자 (1)는이를 먼저 제거된다 :

큐의 기본적인 동작

  • 인큐 - 요소는 큐의 끝에 삽입
  • 디큐 - 삭제하는 큐의 첫 번째 요소
  • IsEmpty 함수 - 쿼리 큐가 비어 있습니다
  • 탑 - 큐의 첫 번째 요소를 반환

코드 일반적인 큐 얼굴 질문

4. 목록

목록 (링크드리스트)는 매우 많은 배열과 같은, 또한 선형 구조이지만, 자신의 메모리 할당, 내부 구조 및 삽입 또는 삭제 동작은 동일하지 않다.

체인 목록이 일련의 노드로 구성되어, 각 노드에 데이터를 저장하고, 다음 노드에 대한 포인터. 목록이 비어있는 경우 첫 번째 노드에 목록 헤드 포인터, 헤드 포인터가 비어 있거나 null입니다.

목록은 파일 시스템, 해시 테이블과 인접 테이블을 구현하는 데 사용할 수 있습니다.

다음 그림은 세 개의 노드가 링크 된 목록을 보여줍니다

목록은 두 가지 종류로 나누어 져 있습니다 :

  • 单向链表
  • 双向链表

链表的基本操作

  • InsertAtEnd —  在链表结尾插入元素
  • InsertAtHead —  在链表开头插入元素
  • Delete —  删除链表的指定元素
  • DeleteAtHead —  删除链表第一个元素
  • Search —  在链表中查询指定元素
  • isEmpty —  查询链表是否为空

常见的队列代码面试题

5. 图

图(graph)由多个节点(vertex)构成,节点之间阔以互相连接组成一个网络。(x, y)表示一条边(edge),它表示节点 x 与 y 相连。边可能会有权值(weight/cost)。

图分为两种:

  • 无向图
  • 有向图

在编程语言中,图有可能有以下两种形式表示:

  • 邻接矩阵(Adjacency Matrix)
  • 邻接表(Adjacency List)

遍历图有两周算法

  • 广度优先搜索(Breadth First Search)
  • 深度优先搜索(Depth First Search)

常见的图代码面试题

6. 树

树(Tree)是一个分层的数据结构,由节点和连接节点的边组成。树是一种特殊的图,它与图最大的区别是没有循环。

树被广泛应用在人工智能和一些复杂算法中,用来提供高效的存储结构。

下图是一个简单的树以及与树相关的术语:

树有很多分类:

  • N 叉树(N-ary Tree)
  • 平衡树(Balanced Tree)
  • 二叉树(Binary Tree)
  • 二叉查找树(Binary Search Tree)
  • 平衡二叉树(AVL Tree)
  • 红黑树(Red Black Tree)
  • 2-3 树(2–3 Tree)

其中,二叉树和二叉查找树是最常用的树。

常见的树代码面试题

7. 前缀树

前缀树(Prefix Trees 或者 Trie)与树类似,用于处理字符串相关的问题时非常高效。它可以实现快速检索,常用于字典中的单词查询,搜索引擎的自动补全甚至 IP 路由。

下图展示了“top”, “thus”和“their”三个单词在前缀树中如何存储的:

单词是按照字母从上往下存储,“p”, “s”和“r”节点分别表示“top”, “thus”和“their”的单词结尾。

常见的树代码面试题

8. 哈希表

哈希(Hash)将某个对象变换为唯一标识符,该标识符通常用一个短的随机字母和数字组成的字符串来代表。哈希可以用来实现各种数据结构,其中最常用的就是哈希表(hash table)。

哈希表通常由数组实现。

哈希表的性能取决于 3 个指标:

  • 哈希函数
  • 哈希表的大小
  • 哈希冲突处理方式

下图展示了有数组实现的哈希表,数组的下标即为哈希值,由哈希函数计算,作为哈希表的键(key),而数组中保存的数据即为值(value):

常见的哈希表代码面试题

추천

출처www.cnblogs.com/jukaiit/p/11901885.html