본문 바로가기

전체 글

(45)
그래프(graph) 1. 그래프의 개념 그래프란 정점들이 간선으로 연결된 자료구조를 말한다. 간선에 대한 제한은 없으며, 간선에 방향이 있는 방향 그래프와 간선에 방향이 없는 무방향 그래프가 있다. 정점에 연결된 간선의 개수를 차수라고 한다. 2. 그래프의 구현 그래프를 구현하는 방법은 많지만 이 글에서는 연결 리스트로 구현하는 방법만을 다룬다. 우선 정점들을 포인터 변수에 저장한다. 그리고, 각 포인터 변수에는 간선으로 연결된(이웃한) 정점들의 주소를 저장한다. 이웃한 정점이 2개 이상이라면, 이를 연결 리스트 형식으로 이어준다. 3. 그래프의 연산 1) 깊이우선 탐색(DFS) 깊이 우선 탐색이란 한 우물을 깊게 파는 방식과 비슷하다. 한 정점에서 시작해 이웃한 정점 중 하나를 방문하고, 그 정점에서 이웃한 정점을 방문한..
트리(Tree) 1. 트리의 개념 트리란 모든 노드들이 부모와 자식 관계로 연결된 자료구조이다. 부모가 없는 노드를 루트 노드라고 하고, 자식이 없는 노드를 단말 노드라고 한다. 같은 부모를 가진 노드를 형제 노드라고 하고, 부모의 부모 이상의 노드들을 조상 노드라고 한다. 자식의 개수를 차수라고 하고, 루트노드를 0 level로 시작해서 자식관계가 거듭될수록 하나씩 올라가는데, 트리의 최대 level을 트리의 높이라고 한다. 이진트리란 모든 노드의 차수가 2 이하인 트리를 말한다. 2. 트리의 구현 트리를 구현하기 위해서는 연결 리스트를 이용한다. 이 글에서는 이진 트리를 구현하는 방법만 다룬다. 트리를 구성하는 연결 리스트의 노드 구조체는 세 개의 멤버변수를 가진다. 하나는 노드의 자료를 저장 할 변수이고, 하나는 ..
큐(Queue) 1. 큐의 개념 스택이란 선입선출(FIFO - First In First Out) 형태의 자료구조이다. 가장 먼저 들어온 자료가, 가장 먼저 나가게 된다. 2. 큐의 구현 큐를 구현하는 방법은 많지만, 이 글에서는 연결 리스트로 큐을 만드는 방법만을 다룬다. 큐을 구성하는 연결 리스트의 노드 구조체는 두 개의 멤버변수를 가진다. 하나는 노드의 자료를 저장 할 변수이고, 하나는 자신 바로 다음에 저장된 노드를 가리키는 링크이다. 가장 마지막으로 저장된 노드는 자신보다 나중에 저장된 노드가 없으므로, 링크가 NULL이다. 3. 큐의 연산 1) 삽입(PUSH) 큐에서 삽입은 항상 마지막에서 일어난다. 가장 마지막에 저장된 노드의 링크를 삽입할 노드로 설정해 주기만 하면 된다. 2) 삭제(POP) 큐의 삭제는 ..
스택(stack) 1. 스택의 개념 스택이란 후입선출(LIFO - List In First Out) 형태의 자료구조이다. 스택의 원리는 접시를 쌓아올리는 것과 같다. 접시를 순서대로 쌓아올리게 되면 가장 마지막에 쌓은 접시가 접시 더미의 가장 위에 위치하게 된다. 따라서 접시더미에서 접시를 하나 집어들면, 맨 마지막에 쌓은 접시를 집어들게 된다. 이처럼 후입선출의 형태로 만든 자료구조를 스택이라고 한다. 2. 스택의 구현 스택을 구현하는 방법은 많지만, 이 글에서는 연결 리스트로 스택을 만드는 방법만을 다룬다. 스택을 구성하는 연결 리스트의 노드 구조체는 두 개의 멤버변수를 가진다. 하나는 노드의 자료를 저장 할 변수이고, 하나는 자신보다 먼저 저장된 노드를 가리키는 링크이다. 가장 처음 저장된 노드는 자신보다 먼저 저장..
연결 리스트 1. 연결 리스트의 개념 리스트란 자료를 나열한 형태로 저장하는 자료구조이다. 그 중에서도 연결 리스트란, 자료들이 서로 줄줄이 연결되어 있는 자료구조를 말한다. 연결 리스트는 순차 리스트와 달리 물리적 구조를 논리적 구조와 일치시킬 필요가 없기 때문에 물리적 구조가 가지고 있는 단점을 보완할 수 있다. 2. 연결 리스트의 구현 순차 리스트를 구현하기 위해서는 c에서 제공하는 포인터를 이용하면 된다. 각 자료들을 하나의 노드에 저장하고, 각 노드들에는 다음 노드의 주소값 또한 저장해야 한다. 즉, 노드를 구조체로서 정의하고, 노드 구조체의 멤버변수로는 노드에 저장될 자료를 저장하는 변수와 다음 노드의 주소값을 저장 할 포인터 변수가 필요하다. 노드가 한쪽 방향으로만 연결되어있으면 단순 연결 리스트, 양쪽..
순차 리스트 1. 순차 리스트의 개념 리스트란 자료를 나열한 형태로 저장하는 자료구조이다. 그 중에서도 순차 리스트란, 자료들의 논리적 순서와 메모리에 저장된 물리적 순서가 일치하는 자료구조를 말한다. 2. 순차 리스트의 구현 순차 리스트를 구현하기 위해서는 c에서 제공하는 배열을 이용하면 된다. 여기서 유의할 점은 2차원 배열을 이용할 때, C는 행 단위로 자료를 메모리에 저장하는 행 우선 순서 방법을 이용한다는 점이다. 3. 순차 리스트의 연산 1) 삽입 순차 리스트는 자료의 논리적 구조와 물리적 구조가 일치하도록 유지해야 한다. 이는, 리스트 중간에 자료를 삽입할 때마다 논리적 구조와 물리적 구조를 일치시키기 위해 일련의 과정을 거쳐야 한다는 뜻이다. 순차 리스트 중간에 자료를 삽입하기 위해서는 물리적 구조에서..
리버싱 2주차 과제 과제 1 플래그 0xEE5EBF12 cmp나 test 명령을 수행하고 je, jne가 나오면 제로플래그를 바꿔 점프한다. 과제 2 너무 어려워서 못풀겠습니다. 입력값과 비밀번호를 비교하는 코드가 어디에 있는지 못찾겠습니다.
리버싱 교육 1주차 과제 q1 #include int main(void){ int a, b, c, d, e; a = 0; b = 10; c = b; b = 123; b = c; b = 10; d = c; b = d; e = c + b - d; return e/10; } q2 #include int main(void){ char arr[80] = "WELCOME TO WHOIS REVERSING CLASS. I'M SINCERELY GLAD TO GIVE A LT ECTUREO YOU"; puts(arr); return 0; } /* EMOCLEW WELCOME SIOHW OT TO WHOIS ISREVER REVERSI SSALC GN NG CLASS IS M'I . . I'M SI YLERECN NCERELY OT DALG G..