일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- cors
- 큐
- 알고리즘
- APOLLO
- 코딩테스트
- C
- 배열
- 프로세스
- 스택
- RxJS
- Machine Learning
- 프론트엔드
- RT scheduling
- 타입스크립트
- pytorch
- 릿코드
- vue3
- GraphQL
- 해시테이블
- 컨테이너
- 프로그래머스
- 연결리스트
- 자바스크립트
- alexnet
- 연결 리스트
- 자료구조
- 브라우저
- 포인터
- 웹팩
- 이진탐색
- Today
- Total
목록자료구조 (13)
프린세스 다이어리
1. 연결 리스트 구조체 만들기 #include #include #define INF 99999999 typedef struct Node{ int data; struct Node *next; } Node; typedef struct Stack{ Node *top; } Stack; 먼저 INF를 무한대의 값으로 설정하고, Node 구조체를 만든다. 기본적으로 연결 리스트는 다음 노드를 가리켜야 하므로, 노드의 data와 다음 노드를 가리키는 포인터 변수 next를 만들어준다. 또 Stack이라는 구조체를 만들어서, 모든 스택이 top이라는 노드를 가지고 있고 포인터를 가지고 있는 구조체이기 때문에 일종의 배열 형태로 만들 수 있다. Top은 스택의 최상단이다. 스택은 데이터를 넣을 때 반드시 top의 자리..
1. 스택(Stack)의 개념 스택은 한쪽으로 들어가서, 동일한쪽으로 나오는 자료구조다. 스택에 한쪽 방향으로 데이터를 넣는 Push와 스택에서 한 쪽 방향으로 데이터를 빼내는 Pop으로 이루어져 있다. 일반적으로 스택은 리스트처럼 생겼기 때문에 배열을 이용한 구현 방법과 연결 리스트를 이용한 구현 방법으로 나뉜다. Push(7) -> Push(8) -> Push(4) -> Pop() -> Push(2) -> Pop() 위 함수를 차례로 실행하면 다음 그림과 같다. 2. 배열을 이용한 스택 구현 #include #define SIZE 10000 #define INF 99999999 int stack[SIZE]; int top = -1; 먼저 전체 스택의 크기 SIZE를 10000으로 정해주고, INF에 ..
1. 양방향 연결 리스트란 양방향 연결 리스트는 각 노드가 머리(Head)와 꼬리(Tail)를 모두 가지는 특징이 있다. 양방향 연결 리스트의 각 노드는 앞 노드와 뒤 노드의 정보를 모두 저장하고 있다. 다음 그림을 보면 앞 노드는 prev, 뒤 노드는 next로 지칭하고 있다. 양방향 연결 리스트를 이용하면 단방향과 달리 리스트의 앞에서부터 혹은 뒤에서부터 모두 접근할 수 있다. typedef struct Node{ int data; struct Node *prev; struct Node *next; } Node; Node *head, *tail; 2. 연결 리스트 노드 삽입 과정 데이터를 오름차순으로 저장하는 양방향 연결 리스트를 구현해 보자. 노드를 삽입할 때는, 앞쪽 노드의 next가 삽입할 노드..
1. 연결 리스트의 장점 일반적으로 배열을 사용하여 데이터를 순차적으로 저장하고, 나열할 수 있다. 하지만 배열을 사용하는 경우, 메모리 공간이 불필요하게 낭비될 수 있다. 연결 리스트를 활용하여 이를 개선할 수 있다. 다음은 연결 리스트가 아닌, 일반적인 배열을 사용하여 특정 원소를 배열의 첫자리에 추가하는 소스다. #include #define INF 10000 int arr[INF]; int count = 0; void addBack(int data) { arr[count] = data; count++; } void addFirst(int data) { for (int i = count; i >= 1; i--) { arr[i] = arr[i - 1]; } arr[0] = data; count++; ..
1. 자료구조가 왜 필요할까? 프로그래머라면 누구나 데이터를 효과적으로 저장하고, 처리하는 방법에 대해서 바르게 이해할 필요가 있다. 그런데 자료구조를 제대로 이해하지 못하면 불필요하게 메모리와 성능을 낭비할 여지가 있다. 예를 들어 프로그램 내에서 INT형 데이터가 100만 개 가량 사용된다고 가정했을 때, 원하는 데이터를 가장 빠르게 찾도록 하는 자료구조는 무엇 일지에 대한 고민을 하면서 프로그램을 짜야한다. 이를 위한 다양한 방법을 제시하는 것이 자료구조이며 가장 효율적인 방법이 무엇인지 알 수 있으려면 자료구조를 알아야 한다. 기본적인 자료구조들은 다음과 같다. (1) 선형 구조 - 배열, 연결 리스트, 스택, 큐 등 (2) 비선형 구조 - 트리, 그래프 등 자료구조와 알고리즘의 상관관계 효율적인..