[13] C review < 연결리스트의 순회 >
Language/자료구조2021. 11. 26. 15:10[13] C review < 연결리스트의 순회 >

연결리스트에서 노드의 추가와 삭제에대해 알아보았으니 이제 연결리스트를 순회하는 방법에대해 생각해 봅시다. 당연하게도 어떤 노드가 어느 위치에 존재하는지 , 존재는 하는지 등 알아보기 위해서는 순회가 필요합니다. 위 함수는 특정 노드의 주소를 반환하는 함수입니다. 첫번째 노드부터 찾기 시작해 운이 좋지않으면 맨 마지막 노드까지 순회하는 방식입니다. 전에는 add_first, add_after 함수를 만들어 살펴보았는데 이제는 index에 추가하는 함수를 만들어 보았습니다. 여기서 중요한 점은 index가 0이냐 0이 아니냐의 차이인데 이는 추가하거나 삭제할 노드가 맨 앞에 있는지 그렇지 않은지를 판단하는 조건입니다. 자, 이제 index를 통한 제거를 알아봤으니 특정 데이터를 주고 그 데이터를 찾아 삭제하..

[12] C review < 연결리스트의 제거 >
Language/자료구조2021. 11. 26. 14:23[12] C review < 연결리스트의 제거 >

이제 연결리스트에서 노드의 삭제과정에 대해 알아보겠습니다. 노드 추가와 마찬가지로 삭제에도 2가지 경우가 있습니다. 첫번째는 맨 앞에 있는 노드를 삭제하는 경우이고, 두번째는 어떠한 노드의 다음 노드를 삭제한는 경우입니다. 첫 번째 노드를 삭제한다는것은 간단합니다. 첫 번째 노드를 가리키고 있는 head를 두번째 노드를 가리키도록 수정하면 됩니다.

[11] C review < 연결리스트의 추가 >
Language/자료구조2021. 11. 26. 12:48[11] C review < 연결리스트의 추가 >

이번 시간에는 새로운 노드를 추가하는 과정에 대해 알아보겠습니다. 추가할때는 2가지 경우의 수가 존재합니다. 맨 앞에 추가하거나, 어떤 노드 바로 뒤에 추가하는 경우가 있습니다. 위와 같이 새로운 노드를 맨 앞에 추가할 경우 첫번째 노드를 가리키는 포인터 head를 보겠습니다. 만약 head가 전역변수일 경우 위 코드와 같이 head = temp 처럼 포인터 변수간에 치환문을 사용하면 됩니다. ( 위 코드의 순서는 필수적으로 지켜져야 합니다. ) 하지만 만약 포인터 head변수가 전연변수가 아니라면 어떻게 될까요 ? 만약 add_frist 함수를 약간 수정해서 인자로 Node *head를 받는다고 생각해봅시다. 가볍게 생각하면 인자로 노드의 주소를 가리키는 head변수를 입..

[10] C review < 연결리스트의 개념 >
Language/자료구조2021. 11. 25. 23:45[10] C review < 연결리스트의 개념 >

연결리스트 개념과 기본동작 리스트 컴퓨터 프로그램은 대부분 리스트 - 기본적인 연산 : 삽입(insert),삭제(remove),검색(search)등 - 리스트를 구현하는 대표적인 두 가지 방법 : 배열, 연결 리스트 배열은 랜덤엑세스가 가능한 자료구조다 랜덤엑세스 ? 배열은 각 칸의 타입이 같고 즉, 크기가 동일하다. 예를 들어 배열의 5번재 칸은 배열의 시작 주소 + 4*(1칸의 크기) n번째 칸에 대한 접근의 차이가 없다. > 랜덤엑세스 몇번째 칸이든 상관 없다. >> 배열의 장점 배열의 단점 - 크기가 고정 - reallocation이 필요 = 리스트의 중간에 원소를 삽입하거나 삭제할 경우 다수의 데이터를 옮겨야 연결리스트 - 다른 데이터의 이동없이 중간에 삽입이나 삭제가 가능하며, - 길이의 제한..

[8] C review < 전화번호부 알고리즘 version5.0 preview >
Language/자료구조2021. 11. 25. 14:51[8] C review < 전화번호부 알고리즘 version5.0 preview >

바로 전 전화번호부 알고리즘 version 4.0을 떠올려 봅시다. 위 그림과 같이 4개의 field를 가지는 struct person을 정의한 후 Person type의 directory 배열을 만들어 사용하였습니다. 이 배열의 각 칸이 구조체인 구조입니다. 예를 들어 특정 칸의 특정 멤버정보를 가져올려면 directory[2].number = ~ 이런식으로 표기 하였습니다. 하지만 일반적으로 c프로그래밍에서 이런식의 구조체 배열을 사용하는 것은 일반적인 스타일이 아닙니다. (효율적이지 않습니다.) 예를 들어 version 4.0의 status() 함수에서 print_person함수를 호출하는 과정을 위 그림에서 살펴봅시다. c언어에서 함수를 호출할때 값에 의한 호출 (call by value) 방식을..

[11] CH4 네트워크 계층 < 라우터 안은 무엇이 있나? >
Network/컴퓨터 네트워크2021. 11. 24. 16:35[11] CH4 네트워크 계층 < 라우터 안은 무엇이 있나? >

2가지 주요 router 기능 - Routing algorithm/protocol (RIP,OSPF,BGP) 수행 - 입력 link에서 출력 link로 datagram 전달 입력 포트 입력 포트는 여러 기능을 수행하는데 위의 그림에서 왼쪽 상자와 출력 포트의 맨 오른쪽 상자는 라우터로 들어오는 입력 물리 링크의 종단으로 물리계층 기능을 수행한다. 입력포트는 또한 들어오는 링크의 반대편에 있는 링크 계층과 상호 운용하기 위해 필요한 링크 계층 기능을 수행한다. 이것은 입력 및 출력 포트에서 중간 상자로 표시된다. 아마 결정적으로, 검색(lookup)함수는 입력포트에서 결정된다. 이는 입력 포트의 가장 오른쪽 상자에서 발생한다. 포워딩 테이블은 도착한 패킷이 스위칭 구조를 통해..

[10] CH4 네트워크 계층 < Network 계층 개요>
Network/컴퓨터 네트워크2021. 11. 24. 13:27[10] CH4 네트워크 계층 < Network 계층 개요>

이 장의 목표 > network계층 서비스의 원리를 데이터 평면을 중점적으로 이해한다. - Network 계층 서비스 모델 - 포워딩 대 라우팅 - 라우터가 어떻게 동작하는가? 1. 송신 host 네트워크 계층은 송신 host의 트렌스포트 계층으로부터 세그먼트를 얻어 각 세그먼트를 데이터그램으로 캡슐화하고 인접한 라우터에게 데이터그램을 보낸다. 2. 수신 host의 네트워크 계층은 트랜스포트 계층 세그먼트를 추출하여 수신 host의 트랜스포트 계층으로 보낸다. 라우터의 근본역할은 입력 링크에서 출력 링크로 데이터그램을 전달하는 것. 모든 host와 router에는 network계층 protocol이 동작한다. R..

[7] C review < 전화번호부 알고리즘 version4.0 >
Language/자료구조2021. 11. 23. 21:36[7] C review < 전화번호부 알고리즘 version4.0 >

동장방식 : 이름과 번호 뿐아니라 email과 소속그룹까지 추가해보자 >> 구조체 이용 , 만약 번호,email,group이 없다면 빈칸으로 둔다. 또한 이름이 하나 이상의 단어로 구성될 수 있으며 단어사이에 여러 개의 공백이 있을 경우 한칸의 공백으로 저장한다. 생각해야할 점 2가지 ! 1. 구조체를 어떻게 사용할 것인가 ? typedef struct person { char *name; char *number; char *email; char *group; } Person; Person directory[CAPACITY]; // Person type의 배열 directory를 선언. person struct를 Person으로 재선언. 2. 빈칸을 어떻게 처리 할 것인가? int compose_name..

[12] CH4 네트워크 계층 < 라우팅 알고리즘 >
Network/컴퓨터 네트워크2021. 11. 22. 19:32[12] CH4 네트워크 계층 < 라우팅 알고리즘 >

그럼 네트워크 계층의 중요한 라우팅 기능에 대해서 알아보겠습니다. 패킷을 송신호스트에서 목적지 호스트로 전송하기 위해서 네트워크 계층은 패킷의 라우팅 경로를 정해야 합니다. 즉, 네트워크 계층은 송신자로부터 수신자로의 패킷 경로를 결정해야 합니다. 여기서는 라우터의 네트워크를 통해 송신자로부터 수신자 까지 좋은 경로를 결정하는 것이 라우팅의 역할로 볼 것 입니다. 대체로 호스트는 하나의 라우터에 직접 연결되어 있는데, 이 라우터를 호스트에 대한 디폴트 라우터라고 부릅니다. 호스트는 모든 패킷을 디폴트 라우터로 전송합니다. 출발지 호스트의 디폴트 라우터를 출발지 라우터라고 하며, 목적지 호스트에 연결된 디폴트 라우터를 목적지 라우터라고 합니다. 라우팅 알고리즘의 목적은 간단합니다. 주어진 라우터와 라우터를..

Language/자료구조2021. 11. 22. 17:13[6] C review < 전화번호부 알고리즘 version3.0 >

동작 방식 : 앞서 했던 알고리즘은 배열의 크기를 미리 할당한 후 사용하였습니다. 만약 배열의 크기가 더 커질 필요가 있을때 이 알고리즘은 제대로 동작하지 못합니다. 즉, 배열을 미리 선언할때 동적할당을 하여 선언합니다. 또한 명령어,이름,번호 3가지 모두 한줄에 입력하여 사용할 수 있게 수정합니다. 생각해야될 점 2가지 ! 1. 어떻게 동적할당 할 것인가 ? > malloc을 사용합니다. 2. 명령어 이름 번호를 어떻게 한줄에 입력하여 사용할 것인가 즉, 어떻게 구분 할 것인가 ? > 명령어 (공백) 이름 (공백) 번호 식으로 공백으로 각 명령어와 입력 인자를 구분합니다. #include #include #include #include #define CAPACITY 100 #define BUFFER_S..

image