배열 6

[CS50] 연결리스트 : 시연

이번 포스팅에선 저번 포스팅의 내용을 실제 강의에서 어떤 방식으로 학생들이 시연하는지를 보고 이해하는 것이 편할 것 같아 링크를 남깁니다. https://www.boostcourse.org/cs112/lecture/119040?isDesc=false 모두를 위한 컴퓨터 과학 (CS50 2019) 부스트코스 무료 강의 www.boostcourse.org 이 영상을 보고 지난 시간에 코딩했던 코드를 보면 이해가 빠를겁니다. #include #include //지난 시간에 포스팅한 node 구조체 정의 typedef struct node { int number; struct node *next; } node; int main(void) { //list라는 이름의 node 포인터를 정의함과 동시에 NULL로 초..

[CS50] 연결리스트 : 도입

지금까지 여러 자료형의 데이터를 메모리에 저장하고, 읽고, 삭제하는 방법에 대해 공부했었습니다. 그런데 만약 프로그램이 복잡해지거나 양이 방대해진다면 기본적인 포인터 구조만으로는 메모리를 관리하기에 다소 번거로울 겁니다. 그래서 오늘은 메모리를 더 효율적으로 관리하고 사용하기 위한 데이터의 개념과 연결 리스트에 대해 공부해보도록 하겠습니다. 데이터 구조란 우리가 컴퓨터 메모리를 효율적으로 관리하기 위해 새로 정의하는 구조체입니다. 이 데이터 구조중 하나인 연결 리스트는 배열과 다르게 각 값이 메모리에 여러군데 나누어져 있더라도 다음 값의 메모리 주소만 기억한다면 배열처럼 값을 연이어서 읽어 들일 수 있게 해 주는 것을 말합니다. 이렇게 각각의 번호가 떨어져 있더라도 포인터를 이용해서 자신의 값과함께 바로..

[CS50] 배열의 크기 조정하기

컴퓨터의 메모리는 사물함 같은 구조를 가지고 있습니다. 예를 들어 학교에 30개의 사물함이 있다고 하면 전학생이 왔다고 해서 사물함의 개수를 더 늘리거나 30개보다 더 많이 사용할 수는 없습니다. 이 같이 이미 일정한 크기의 메모리가 할당되어 있는 상황에서 그 크기를 늘리기는 쉽지 않습니다. 오늘은 포인터와 malloc의 개념을 응용하여 이미 정의된 배열의 크기를 바꾸는 방법에 대해 공부해보도록 하겠습니다. 배열의 크기를 늘리기 가장 쉬운방법은 이미 배열이 저장된 메모리의 옆에 일정 크기의 메모리를 덧붙이면 되지만 실제로는 다른 데이터가 있을 수 있기 때문에 어렵습니다. 따라서 새로운 공간에 큰 배열을 저장할 수 있는 메모리를 다시 할당하고 기존 배열의 값을 하나씩 옮겨줘야합니다. 이러한 작업은 기존 배..

[CS50] 선형 검색

이번에는 주어진 배열에서 선형 검색으로 값을 찾는 방법을 공부해보려고 합니다. 전화번호부 같이 한개의 배열이 아닌 여러 개의 배열이 있는 경우 한 배열의 특정 속성 값을 찾고 동일한 위치의 다른 배열의 속성 값을 출력하는 방법을 공부해보도록 하겠습니다. 선형 검색은 지난 포스팅에서 정리했듯이 처음부터 끝까지 원하는 원소를 찾을 때까지 차례대로 검색하는 것을 말합니다. 선형 검색의 정확성이나 효율성을 따져본다면 처음부터 끝까지 모든 자료를 확인한다는 것에 정확하다고는 할 수 있지만 효율적이지는 않습니다. 만약 100만 개의 원소가 있는 리스트에 원하는 자료가 가장 마지막에 있다거나 리스트 안에 없다면 이처럼 효율성이 매우 떨어지는 작업은 없을 겁니다. 따라서 선형 검색은 자료가 정렬되어있지 않거나 그 어떤..

[CS50] 문자열과 배열

C뿐 아니라 많은 프로그래밍 언어들은 문자열을 저장하기 위해 string 자료형을 사용했습니다. 문자열이라는 단어는 문자가 나열되어있다. 즉 배열되어있다.라는 의미로 추측해볼 수 있는데요. 이런 관점에서 string 자료형이 C에서 어떻게 정의되어있는지 배열과 관련해서 공부해보도록 하겠습니다. string은 말 그대로 문자(char)의 배열이었습니다. 만약 string s = "HI!"; 로 정의되어 있다면 s는 문자열이기 때문에 메모리상에 'H', 'I', '!'로 저장되어 있을겁니다. 그런데 사실 문자열은 저번 포스팅에서 설명했듯이 길이가 정해져 있지 않기때문에 메모리의 크기 역시 정해져있지 않습니다. 그럼 string이 연속으로 정의되어있다면 어떻게 구분할까요?? 그래서 string에는 종단 문자인..

CS 기초/배열 2021.08.08

[CS50] 배열

지금까지 특정 자료형의 변수를 선언하면 컴퓨터 메모리상 어딘가에 특정 크기만큼의 자리를 차지하게 됩니다. 이번 포스팅에서는 메모리상에서 여러값을 연이어 저장하는 방법을 공부해보도록 하겠습니다. C에는 여러가지 자료형과 그에 맞는 메모리의 크기가 있습니다. - char : 1byte - bool : 1byte - int : 4byte - float : 4byte - long : 8byte - double : 8byte - string : 알 수 없음(길이에 따라 다르다) 이러한 데이터들은 RAM이라고 하는 컴퓨터 하드웨어에 저장이 됩니다. 이제 여러값을 연이어 저장해서 사용하기 위해서는 먼저 배열이란 단어에대해 알아야합니다. 배열이란? 번호(인덱스)와 번호에 대응하는 데이터들로 이루어진 자료구조이다.(출처..

CS 기초/배열 2021.08.07