목록자료구조 (9)
Developer_Neo
그래프 (Graph) 란? 노드(node)와 그 노드를 연결하는 간선(edge)을 하나로 모아 놓은 자료 구조 노드 (Node): 위치를 말함, 정점(Vertex)라고도 함 간선 (Edge): 위치 간의 관계를 표시한 선으로 노드를 연결한 선 그래프 (Graph) 종류 무방향 그래프 (Undirected Graph) 방향이 없는 그래프 간선을 통해, 노드는 양방향으로 갈 수 있음 보통 노드 A, B가 연결되어 있을 경우, (A, B) 또는 (B, A) 로 표기 방향 그래프 (Directed Graph) 간선에 방향이 있는 그래프 보통 노드 A, B가 A -> B 로 가는 간선으로 연결되어 있을 경우, 로 표기 가중치 그래프 (Weighted Graph) 또는 네트워크 (Network) 간선에 비용 또는 ..
힙 (Heap) 트리를 기반으로 해 어떠한 목적에 따라 변환시킨 자료구조이다. 데이터에서 최대값과 최소값을 빠르게 찾기 위해 고안된 완전 이진 트리(Complete Binary Tree) 완전 이진 트리: 노드를 삽입할 때 최하단 왼쪽 노드부터 차례대로 삽입하는 트리 사용하는 이유 배열에 데이터를 넣고, 최대값과 최소값을 찾으려면 O(n) 이 걸림 이에 반해, 힙에 데이터를 넣고, 최대값과 최소값을 찾으면, O(logn) 이 걸림 우선순위 큐와 같이 최대값 또는 최소값을 빠르게 찾아야 하는 자료구조 및 알고리즘 구현 등에 활용됨 구조의 조건 각 노드의 값은 해당 노드의 자식 노드가 가진 값보다 크거나 같다. (최대 힙의 경우) 최소 힙의 경우는 각 노드의 값은 해당 노드의 자식 노드가 가진 값보다 크거나..
트리 (Tree) 구조 Node와 Branch를 이용해서, 사이클을 이루지 않도록 구성한 데이터 구조 즉 노드로 이루어진 자료 구조이다. 트리는 하나의 루트 노드를 갖는다. 루트 노드는 0개 이상의 자식 노드를 갖고 있다. 그 자식 노드 또한 0개 이상의 자식 노드를 갖고 있고, 이는 반복적으로 정의된다. 노드(node)들과 노드들을 연결하는 간선(edge, Branch)들로 구성되어 있다. 트리에는 사이클(cycle)이 존재할 수 없다. 노드들은 특정 순서로 나열될 수도 있고 그럴 수 없을 수도 있다. 각 노드는 부모 노드로의 연결이 있을 수도 있고 없을 수도 있다. 각 노드는 어떤 자료형으로도 표현 가능함 어디에 많이 사용되나? 트리 중 이진 트리 (Binary Tree) 형태의 구조로, 탐색(검색)..
테이블이란? 표와 같은것으로 모든표를 가리켜 테이블이라 하지않는다. 따라서 저장된 데이터의 형태가 키(key)와 값(value)로 하나의 쌍을 이룰때에만 테이블로 구분짓는다. 이때 키는 데이터를 구분하는 기준이 되기 때문에 모든 키는 중복 되지않고 키가 존재하지 않는 값은 저장할 수 없다. 해쉬 테이블이란? Key와 Value로 데이터를 저장하는 자료구조 중 하나로 빠르게 데이터를 검색할 수 있는 자료구조 해시함수를 사용하여 키를 해시값으로 매핑하고, 이 해시값을 인덱스 혹은 주소 삼아 데이터의 값(value)을 키와 함께 저장하여 검색을 빠르게 하기 위한 자료 구조 위에서 말했던 테이블과 다른점은 해쉬함수를 이용한다는 것이다. 예) 파이썬 사전(Dictionary) 자료형 - Key를 가지고 바로 데이..
링크드(연결) 리스트(Linked List) 왜? 배열의 경우로 데이터를 넣었을 때 미리 공간을 정해놓아야한다. 만약 데이터가 너무 커서 공간을 넘어가서 데이터가 끊어지게 되면 안되기 때문에 연결리스트가 나오게 된 이유가 있다. - 노드를 연결시킨 자료구조 - 노드가 데이터와 포인터를 가지고 한 줄로 연결되어 있는 방식으로 데이터를 저장하는 자료 구조 위 그림처럼 데이터를 담고 있는 노드들이 연결되어 있는데, 노드의 포인터가 다음이나 이전의 노드와의 연결을 담당함. C언어에서는 주요한 데이터 구조이지만, 파이썬은 리스트 타입이 링크드 리스트의 기능을 모두 지원 노드(Node): 데이터 저장 단위 (데이터값, 포인터) 로 구성 포인터(pointer): 각 노드 안에서, 다음이나 이전의 노드와의 연결 정보를..
스택(Stack) 제한적으로 접근할 수 있는 나열 구조 (데이터를 제한적으로 접근할 수 있는 구조) 접근 방법은 언제나 목록의 끝에서만 일어난다 (한쪽 끝에서만 자료를 넣거나 뺄 수 있는 구조) 가장 나중에 쌓은 데이터를 가장 먼저 빼낼 수 있는 데이터 구조 LIFO(Last In, Fisrt Out) 또는 FILO(First In, Last Out) 데이터 관리 방식 LIFO: 마지막에 넣은 데이터를 가장 먼저 추출하는 방식 FILO: 처음에 넣은 데이터를 가장 마지막에 추출하는 방식 활용 컴퓨터 내부의 프로세스 구조의 함수 동작 방식 프로세스 메모리 구조 - stack 영역 컴퓨터에서 포인터라고 하는 자료의 위치 표시자와 넣고 빼는 명령어를 사용해서 스택을 이용 장단점 장점 구조가 단순해 구현이 쉽다..
큐(Queue) 먼저 집어 넣은 데이터가 먼저 나오는 FIFO(First In First Out)구조로 저장하는 형식 또는 반대로 LILO(Last-In, Last-Out) 방식 넣는 데이터가 같은 자료형이 아니어도 됨. 표를 사러 일렬로 늘어선 사람들로 이루어진 줄을 말하기도 하며, 먼저 줄을 선 사람이 먼저 나갈 수 있는 상황을 연상하면 된다. (출처) 스택과 꺼내는 순서가 반대 장단점 데이터 접근, 삽입, 삭제가 빠르다. 큐 역시 스택과 마찬가지로 중간에 위치한 데이터에 대한 접근이 불가능하다 큐(Queue)의 핵심 연산 Enqueue 큐에 데이터를 넣는 기능 반환 X Dequeue 큐에서 데이터를 꺼내는 기능 데이터 반환 다른 연산들 QueueInit 큐의 초기화를 진행한다. (큐 생성 후 제일 ..
2022.01.16 - [분류 전체보기] - [python] 인덱싱(indexing), 슬라이싱(slicing) with 문자열, 리스트, 튜플 [python] 인덱싱(indexing), 슬라이싱(slicing) with 문자열, 리스트, 튜플 인덱싱(indexing) - 시퀀스 자료형인 문자열, 리스트, 튜플에 사용가능 - 시퀀스 자료형에 부여된 번호를 의미한다. 특징 양수 인덱스 앞에서부터 시작하는 것으로 0부터 시작 음수 인덱스 뒤에서부 devloper-dreaming.tistory.com 배열 연관된 데이터를 하나의 변수에 그룹핑해서 관리하기 위한 방법 같은 종류의 데이터를 효율적, 순차적으로 관리, 저장하기 위해 사용한다. 파이썬에서는 리스트자료형이 배열 기능을 제공한다. 장점 - 인덱스 번호로..