no image
값에 의한 호출(call by value) / 참조에 의한 호출 (call by reference)
우리는 프로그래밍을 하다 보면 반드시 함수/메서드를 사용하게 된다. 모든 기능을 메인함수 안에 넣을 수 없기에 코드의 가독성을 위해서나, 추상화나 재사용성을 위해서나. 유지보수를 위해서나 함수/메서드를 사용하는 것이 바람직하다. 어떤 언어를 사용하든 간에 매개변수를 이용한 함수를 사용한다면 아래 그림과 같이 사용할 것이다. 먼저 함수가 호출되면 컴퓨터 일어나는 과정을 알 필요가 있다. 함수가 호출되면 호출된 함수의 매개변수, 지역변수 반환 주소등 및 기타 상태 정보를 포함한 스택프레임이 메모리의 스택에 생성된다. 일종의 사용자정의 함수내에서 사용할 변수를 새로 선언하여 사용하는 것이다. 그리고 만들어진 사용자정의 함수의 매개변수로 인수가 전달이 된다. 이 과정이 복사의 과정이다. 그리고 제어권은 사용자정..
2024.04.08
SW
no image
리눅스 개인 서버 만들어보기 ( CLI , GUI 원격접속, Xrdp, SSH )
오래된 컴퓨터를 활용해서 집에 로컬 개인 서버 컴퓨터를 설치해 보았다. 사실 성능이 좋은 컴퓨터는 아니기에 가상화 실습 혹은 간단한 서버 구현을 위해 사용할 예정이다. 위 컴퓨터는 우분투 22.04 LTS 버전으로 포맷하여 사용 중이다. 목표 1. 원격으로 컴퓨터 전원 켜기(WOL) 2. 집 공유기 IP(외부IP)로 접근하여 집에 있는 서버 컴퓨터에 원격접속 3. 원격 접속은 CLI,GUI 2가지 형태로 접근 가능해야 함 구현 CLI 접속 = SSH 접속 (port : 22) GUI접속 = XRDP 접속 (port : 3389) 서버 컴퓨터로써 결국 외부(외부 IP)에서 접속해서 CLI환경과 GUI환경 모두 사용하는 것을 목표로 했다. 위 그림과 같이 원격접속을 구현하였다. 집에 있는 공유기(외부 IP)..
2024.04.03
no image
(Linux)Ubuntu 터미널 안 열리는 오류 발생 시
오랜만에 로컬에서 VirtualBox를 이용해서 리눅스 가상환경을 만들어서 사용할 일이 생겼다. 안전한 LTS 버전 중 가장 최근버전의 우분투를 사용을 했다. 모두가 아는 일반적인 방법으로 똑같이 가상환경에 우분투를 설치를 했다. 하지만 우분투를 실행하고 보니 터미널이 열리지 않는 증상이 발생했다. 하지만 찾아보니 나만 겪는 문제는 아닌 듯했다. https://askubuntu.com/questions/1435918/terminal-not-opening-on-ubuntu-22-04-on-virtual-box-7-0-0/1436448#1436448 Terminal not opening on Ubuntu 22.04 on Virtual box 7.0.0 I'm using windows 10 and I inst..
2024.01.17
no image
(C언어) 연결 리스트(2)(삽입, 삭제 연산) [자료구조]
지난번에 연결 리스트에서 노드의 기본적인 것들을 알아보았다. (C언어) 연결 리스트(1) [자료구조] (C언어) 연결 리스트(1) [자료구조] 자료구조에서 매우 중요한 연결 리스트의 기본적인 구조에 대해 알아보자. 연결 리스트는 노드라고 부르는 아이템의 리스트이다. 그중 단일, 원형 연결 리스트는 하나의 링크 필드를 가지는 리 taco99.tistory.com 이전에 배웠던 것을 활용해서 연결 리스트에서 삽입과 삭제 연산을 구현해보자. ##삽입 연산 삽입 연산은 노드의 연결을 이용해 구현할 수 있다. 삽입연산은 리스트의 첫 부분에 새로운 노드를 추가하는 연산과, 리스트의 중간에 새로운 노드를 추가하는 연산을 구현해보겠다. 결국 같은 원리이지만 선행 노드 변수의 유무로 인해 코드상 약간의 차이가 생긴다. ..
2022.03.29
no image
(C언어) 연결 리스트(1)(노드의 정의,생성,연결) [자료구조]
자료구조에서 매우 중요한 연결 리스트의 기본적인 구조에 대해 알아보자. 연결 리스트는 노드라고 부르는 아이템의 리스트이다. 그중 단일, 원형 연결 리스트는 하나의 링크 필드를 가지는 리스트이고 두개의 링크 필드를 가지는 리스트는 이중 연결 리스트임을 이전에 배웠다. 2022.02.19 - [SW/Data structure] - [자료구조] 리스트(List) [자료구조] 리스트(List) 자료구조 리스트에 대해 알아보자. 우리가 흔히 일상생활에서 사용하는 리스트와 같다. (EX. 오늘 할 일, 장 볼 리스트 등등) 리스트는 순서의 개념이 없는 집합과는 다르게 순서, 위치를 가진다. taco99.tistory.com 연결 리스트의 구성요소는 다음과 같다. Head 포인터 : 연결리스트에서 첫 번째 노드의 주..
2022.03.05
no image
(C언어) 연결 리스트로 스택 구현해 보기[자료구조]
(C언어) 연결 리스트(1) [자료구조] (C언어) 연결 리스트(1) [자료구조] 자료구조에서 매우 중요한 연결 리스트의 기본적인 구조에 대해 알아보자. 연결 리스트는 노드라고 부르는 아이템의 리스트이다. 그중 단일, 원형 연결 리스트는 하나의 링크 필드를 가지는 리 taco99.tistory.com 연결 리스트로 이전에 배운 스택을 구현해 보자. 스택을 배열로 구현했을 때의 모습이다. 배열로 구현했기 때문에 구현은 간단했지만 크기가 제한됐었다. 우리가 배운 스택을 어떻게 연결 리스트로 구현할 수 있을까?? 위 그림처럼 연결 리스트로 구현한다면 외부적으로 스택과 완전히 일치한다. 연결 리스트의 장점인 동적으로 구현할 수 있다는 점을 이용해 크기에 제한받지 않고 스택을 구현할 수 있다. 하지만 동적 메모리..
2022.02.19
no image
[자료구조] 리스트(List)
자료구조 리스트에 대해 알아보자. 우리가 흔히 일상생활에서 사용하는 리스트와 같다. (EX. 오늘 할 일, 장 볼 리스트 등등) 리스트는 순서의 개념이 없는 집합과는 다르게 순서, 위치를 가진다. 스택, 큐 또한 크게 본다면 리스트라고도 볼 수 있다. 리스트는 구현 방법에 따라 배열로 구현하는 순차 리스트, 연결 리스트로 구현하는 여러 연결 리스트들이 있다. 연결 리스트들에는 단일 연결 리스트, 원형 연결 리스트, 이중 연결 리스트가 있다. 각 리스트들에 대해 대략적으로 알아보자.(각 리스트의 코드적인 부분은 추후 포스팅할 예정) ##순차 리스트 순차 리스트는 배열로 구현한 리스트로서 구현이 쉽고 속도가 빠르다는 장점이 있다. 하지만 배열의 특성상 동적으로 크기를 줄이기 어렵다는 단점이 있다. [삽입] ..
2022.02.19
no image
(C언어)연결 리스트로 큐 구현해 보기[자료구조]
(C언어) 연결 리스트(1) [자료구조] (C언어) 연결 리스트(1) [자료구조] 자료구조에서 매우 중요한 연결 리스트의 기본적인 구조에 대해 알아보자. 연결 리스트는 노드라고 부르는 아이템의 리스트이다. 그중 단일, 원형 연결 리스트는 하나의 링크 필드를 가지는 리 taco99.tistory.com 연결 리스트로 큐를 구현해 보자. 큐를 배열로 구현했을 때의 모습이다. 배열로 구현했기 때문에 크기가 제한됐었다. 연결 리스트로 큐를 구현해 본다면 어떤 모습일까?? 위와 같은 모습이 될 것이다. 쉽게 생각하면 단순 연결 리스트에다 Front, Rear 2개의 포인터를 추가한 것이다. Front는 삭제, Rear에는 추가 혹은 삽입이 관련된다. 이렇게 연결 리스트로 구현한다면 코드가 보다 복잡해지고 링크 필..
2022.02.09
no image
(C언어) 스레드 이진트리 [자료구조]
이번에는 스레드 이진 트리에 대해 공부해 보자. 보통 이진 트리를 순회할 때 순환 호출을 사용한다. 만약 이진 트리의 노드 개수가 많아지고 트리의 높이가 높아진다면 순환 호출은 상당히 비효율적이다. 그럼 순환 호출을 사용하지 않고 구현할 수 있는 다른 방법이 무엇일까? 먼저 위 이진 트리를 보자. 노드 개수 7개 (N) 총 링크의 개수(노드당 링크 2개) 14개 (2N) 다른 노드를 가리키는 링크의 수 6개 (N-1) NULL을 가리키는 링크의 수 8개 (N+1) 표와 같은 규칙을 가진다. NULL을 가리키는 링크는 N+1개나 존재하지만 사용하지 않는다. 스레드 이진 트리의 가장 큰 아이디어는 NULL을 가리키는 링크를 이용해 순환 호출 없이 트리의 노드들을 순회할 수 있도록 하는 것이다. NULL 링크..
2022.01.29