Programming Languages 21

[JAVA/자료구조] 자바 연결리스트 사용법 (Linked List) 구현 / 예제 정리

▷ 연결 리스트 (Linked List)란? 연결 리스트(Linked List)는 연결 리스트, 링크드 리스트는 각 노드가 데이터와 포인터를 가지고 한 줄로 연결되어 있는 방식으로 데이터를 저장하는 자료 구조이다. 연결 리스트에서 수행되는 작업은 값 추가, 삭제, 검색 등이 있다. 자세한 구현 방법은 아래 글을 통해 소개하겠다. 먼저 연결리스트의 개념에 대해 정리한 글은 다음과 같다. 자료 구조의 기본인 배열과 연결 리스트의 장단점과 차이점 등을 정리한 글이다. (언어와는 상관 없이 기본 개념을 참고하기 좋은 글이니 참고하도록 하자.) [C언어/자료구조] 포인터 - 연결 리스트(Linked List) / 배열과 차이점 / 개념 정리 오늘은 C언어의 자료 표현 방식 중 '포인터와 연결 리스트(Linked ..

[C언어/자료구조] 포인터 - 연결 리스트 (Linked List) 개념 총 정리 / 배열과 차이점?

오늘은 C언어의 자료 표현 방식 중 '포인터와 연결 리스트(Linked List)' 에 대해 알아보고자 한다. 연결 리스트는 링크(link)를 이용해 표현한 리스트이다. 연결 리스트는 배열의 한계를 극복한 표현 방법 중 하나로 동적 할당이 가능한 것이 특징이다. 그 구조를 더 이해하기 쉽게 데이터 구조를 먼저 살펴보자. 1. 포인터의 개념 데이터가 담긴 주솟값을 저장하는 변수 다른 어떤 변수의 주소를 그의 값으로 저장한다. C 언어에서는 모든 변수가 주소를 가지고 있기 때문에, 모든 변수에 대해서 포인터 유형이 존재한다. 2. 포인터의 특성 1) 초기화 - 포인터를 선언만 하고, 초기화하지 않으면 값은 미정(undefined), 포인터 변수에 주소를 지정해야 한다. - 주소 연산자 ‘&’를 해당하는 변수..

[C언어/자료구조] 배열 - 2차원 배열, 3차원 배열, 구조체, 순차 리스트

오늘은 C언어의 자료 표현 방식 중 반드시 기본으로 알아야 할 '배열' 에 대해 알아보고자 한다. 1. 배열의 개념 배열은 종류가 같은 여러개의 데이터를 순차적으로 나열한 것이다. 정수(int), 문자(char), 부동소수(double) 뿐 아니라 구조화 타입의 배열도 허용한다. 2. 배열의 특성 인덱스 범위(index range)가 존재하며 이 범위를 넘게 되면 에러가 발생한다. 배열의 크기는 선언 시 명세하며, 이 크기는 불변하다. (크기 = 길이) 배열의 lower bound는 항상 0이다. upper bound는 최소 lower bound의 +1 이다. 배열의 선언과 초기화가 동시에 가능하다. 예) int a[100]={0} //배열 a를 선언과 동시에 0으로 초기화 3. 배열의 선언 대괄호([ ..

[JAVA/자료구조] 자바 큐 Queue 사용법 / 큐의 특징과 예시 총 정리

▷ 큐(Queue)이란? 큐(Queue)는 FIFO(퍼스트 인 퍼스트 아웃) 원리를 기반으로 구성된 요소들의 집합을 나타내는 추상적인 데이터 유형이다. 큐는 스택과 다르게 양방향 자료구조이다. 즉 출구, 입구가 따로 따로 존재한다는 것이다. 스택의 삽입,삭제가 top에서 모두 이루어진다면 큐는 -큐의 가장 앞 부분을 가리키는 front -큐의 가장 뒷 부분을 가리키는 rear 에서 삽입, 삭제가 이루어진다. 큐에서 수행되는 작업은 다음과 같다. 큐의 rear에 데이터를 추가하는 add/offer, 큐의 front의 데이터를 제거하고 null값으로 채우는 poll, 제거만 하는 remove, 초기화하는 clear 큐의 맨 앞(front)에 있는 요소를 제거하지 않고 액세스하는 peek ▷ 큐(Queue)의..

[JAVA] 문자열 String | StringBuffer | StringBuilder 각 차이점 - 성능의 차이!

자바에서 문자열을 사용할 때 여러가지 방법이 존재한다. char 형태를 이어붙여 문자열을 만들어야하는 C/C++와는 달리, 자바에서는 기본으로 문자열이 제공되어 상대적으로 매우 편리하다. 우리가 가장 많이 알고 있는 기본 형태인 String 과 더불어 자바에서 문자열을 표현하는 방법은 다음과 같다. 1) String 2) StringBuffer 3) StringBuilder 먼저 세 가지 방법으로 작성한 다음 코드를 보자. public class Main { public static void main(String[] args) { String str = new String("App"); StringBuffer strbuffer = new StringBuffer("App"); StringBuilder st..

[JAVA/자료구조] 자바 Stack 사용법 / 스택 예시 총 정리 - 문자열 뒤집기, 괄호 짝 맞추기

▷ 스택(Stack)이란? 스택(stack)은 LIFO(라스트 인 퍼스트 아웃) 원리를 기반으로 구성된 요소들의 집합을 나타내는 추상적인 데이터 유형이다. 스택에서 수행되는 작업은 크게 세 가지로 구분이 가능하다. 요소를 스택의 맨 위에 추가하는 push, 스택의 맨 위 요소를 제거하는 pop, 스택의 맨 위에 있는 요소를 제거하지 않고 액세스하는 peek ▷ 스택(Stack)의 특징? 스택 구조는 위로 쌓아 올린 동전 혹은 접시와 같다. LIFO(Last-In First-out) > 스택에 마지막으로 추가된 요소가 가장 먼저 제거 (가장 나중에 쌓은 접시가 먼저 제거 됨) 스택의 한쪽 끝에서만 액세스 가능 > 일반적으로 스택의 'top'이라고 하는 한쪽 끝에서만 추가 및 제거된다. 일정한 시간 복잡성 ..

[JAVA] 자바 정수형 사용하기 / int형과 long형의 정확한 차이점

자바에서 정수를 담을 수 있는 변수 유형은 int / long 두 가지가 있다. 다음은 두 자료형의 차이를 정리한 것이다. int (4바이트) -2,147,483,648부터 2,147,483,647까지의 값을 저장할 수 있다. long(8바이트) int가 보유할 수 없는 더 큰 정수를 보유할 때 사용한다. -9,223,372,036,854,775,808부터 9,223,372,036,854,775,807까지의 값을 저장할 수 있다. int형을 사용해 코드를 짜는 데 알 수 없는 오버플로우 오류가 난다면, 자료형을 적절히 사용했는지 의심해보자.

[JAVA] 자바에서 오름차 순/내림차 순 정렬하기 - Arrays.sort , 내림차 순 정렬 시 유의 사항

자바 배열을 정렬하기 위해서는 import java.util.Arrays; 을 가장 먼저 임포트해줘야 한다. 그리고 선언 된 배열을 오름차 순/내림차 순인지에 따라 다음와 같이 정렬한다. 배열 A를 오름차 순으로 정렬하기 => Arrays.sort(A); > 결과 input output {3,1,7} {1,3,7} 배열 A를 내림차 순으로 정렬하기 => Arrays.sort(A,Collections.reverseOrder()); 혹은 Arrays.sort(A,Comparator.reverseOrder()); > 예상 결과 input output {3,1,7} {7,3,1} 그러나 예상 결과와 다르게 오류가 뜰 것이다. error: no suitable method found for sort(int[],C..

[JAVA] 자바에서 제곱/제곱근 구하는 방법? - Math.pow(), Math.sqrt() (반복문 없이 쉽게 계산하기)

정수의 제곱 혹은 제곱근을 구하기 위해 반복문을 사용해본 적이 있는가? 수학 공식으로 계산하면 쉬운데, 코드로 구현하게 되면 여간 복잡해지는 게 아니다. 이 때 자바 Math 클래스를 활용하면 단순하고 쉽게 계산이 가능하다. Math 클래스란? java.Lang 패키지에 포함된 클래스로 수학과 관련된 일련의 작업들을 처리할 수 있다. Math.pow(double a, double b) ----> a^b 제곱 구하기 활용 예시 ) Math.pow(3,2) ----> 3^2 (3의 2승=9) Math.pow(7,3) ----> 7^3 (7의 3승=343) 체크포인트 ) return값과 a,b 값 모두 double 형태임을 감안하자. Math.sqrt(double a) ----> a의 양의 제곱근 구하기 활용..