그동안 좀 바빠서 포스팅을 못했는데 무려 연결리스트의 총괄적인 기본학습을 마쳤다. 자축. 갑자기 상승하는 예제난이도 때문에 고생도 했지만 이게 포인터를 제대로 이해하지 못해서 좀 고민했던것도 있다. 그래서 포인터의 이해와 활용이라는 서적도 사서 따로 봤다. C언어 책을 살까하다가 솔직히 포인터 부분만 보면 돼서 돈이 아까웠는데, 포인터 부분만 마침 딱 설명하고 깊게 들어가는 서적이 있어서 신난다 하면서 샀다. ================================================================================= 연결리스트란 말그대로 자료를 이어 붙여서 만든 구조다. 기차같다고나 할까. 꽤나 유연해보이는 구조다. 밧줄같기도 하고,, 구조체와 표인터의 이해가 정확하..
더미 기반의 단순 열결 리스트에대해 배웠다. 그전에 어제 배웠던것들중 못배운걸 다시 정리하겟다 1. main을 mian으로 입력해서 MSVCRTD.lib파일 관련한 LNK2019 LNK1120에러:main을 찾는 에러다. 2. tail이 없기 때문에 내가 만든게 더 간결한 코드 맞네 첫번째것은 도데체 뭔가해서 찾았다. 대체로 다른 사람 코드를 잘못가져다쓰면 무슨이스터널심볼하면서 이상한 에러가나오는데 내것은 에러코드는 다르고 에러메시지로만 검색을 해서 엄한 해결법을 따라 할 뻔했다. 아무튼,,,, main코드가 없다는 에러라는 소리다. 저것도 정확히 말하는 자료가아니라, 다른 사람이 윈도 프로그래밍시 콘솔프로젝트로 실수로 생성했을때 나오는 에러라 그거에 관한 답변을 보고 떠올린것이다. 아무튼 더미기반의 단..
저번 리스트에이어 이번엔 연결기반의 리스트. 메모리를 동적할당받아사용하는 이유는 배열의 메모리 특성이 정적이기때문!(필자는 단점이라고 말했지만 난 장점도 될수있다고 생각한다.) 개념적 설명을 하기위해 간단한 코드를 소개하며 동작과정을 개요적으로 설명했다. 노드가 노드끼리 연결되는것이 약간 목걸이 같다고 생각됐다. 자료구조를 제대로 공부하려면 가급적 세가지 순서를 지켜야된다고 한다. 1.자료구조의 ADT 정의 2.정의한 ADT의 구현 3.구현이 완료된 자료구조의 활용 역시 가장 프로그래밍을 체계적으로 설명해주는 저자라고 생각한다. 이분을 우리나라 소프트웨어 교육과정 생성에 동참시켜드려야된다고 생각한다. 문제를 풀어봤다. 예제의 리스트는 전통적인 리스트답게 꼬리에꼬리를 무는 방식으로 요소를 추가하지만 문제는..
와,, 좀 난이도가 살벌하게 상승한게 느껴진다. 예제가 어렵다면 어려울수도 있는게 포인터와 배열, 동적할당에등 C언어에대한 기초가 탄탄하지 않은사람이 독학으로 보게되면 엄청나게 헤멨을 것이다. 나도 그랬다,, 대신 그만큼 공부가 많이됐다. 오늘 배운내용이라기보단 내가 실수하고 빠뜨린 부분을 정리해보자. 1.첫번째 범한 오류, 이미 저자가 구현한 리스트자료구조를 게시판에서 받아서 사용했다. 남이 만든 소스와 헤더파일을 내가만든것과 연동시키려면 그냥 컴파일러만 추가하는것이아닌 파일 자체도 내가 작업중인 프로젝트 디렉터리 안에 있어야한다느 것이다. 표준라이브러리에있으면 에 아니면 ""에 넣는것도 알았다. 2.포인터에대한 공부가 많이 돼었다 동적메모리할당으로 인해 값변환을 참조연산자들을 쓰지않은채로 가능했던것도..
본격적인 자료구조 학습에 들어가기전에 추상자료형에대해 정의 해보고 넘어가는 시간이었다. 컴퓨터공학분야에서의 추상자료형에대해 설명하고 좀더 좁게 자료구조에서의 추상자료형에대해 설명했다. 즉,, 자료구조의 일종인 구조체와 그에 관련된 연산의 종류를 추상자료형이라 칭한다고한다. 이때, 추상자료형과 C++의 클래스안의 메소드가 비슷하다고 생각했다. 아니 같다고 할 수도 있으려나. 자료구조 학습전에 ADT정의를 먼저 설명한 이유는 자료구조 학습을 좀더 효과적으로 하기위해서라고 생각하고 나도 이게 맞다고 생각한다. 그런데 자료구조를 이책에서 정한 방식 반대로 공부해봤기때문에 이것이 효과적이라고 좀더 깊게 깨우칠 수있는 것이라고 생각한다. 먼저 자료구조의 ADT를 정의하고 자료구조를 활용하는 알고리즘을 알아본다음 마..
재귀예제의 단골손님 하노이의 탑에 대해 알아봤다. 하노이의 탑예제는 처음 배웠을땐 정말 이해가 안됐는데 지금보니 약간 이해가 됐다. 특히 저번의 피보나치 수열의 예제와 함께보면 이해가 잘된다. 이해가 안됐던 점은 팩토리얼 예제같은 경우는 함수 재귀호출을 한 함수에 하나만 하는데 피보나치나 하노이 예제의경우는 두개의 함수를 호출해서 순서가 어떻게 되는지 너무 헷갈렸다. 특히 하노이 예제같은 경우는 처음 배우면 진짜 이렇게 대충 생각해서 코딩해도 되나 싶을 정도로 알려주는 경우가 많다. 나같은 경우는 코드가 진행되는 한줄 한줄, 한단계, 한단계를 이해하고 싶기 때문에 하노이 타워 코드를 내맘대로 살짝 추가해서 함수 호출이 어떻게 이뤄지고 파라미터 변화가 어떻게 이뤄지는지 알아보았다. #include void..
재귀함수를 활용한 시간이었다. 재귀의 개념을 전에 나왔던 이진 탐색알고리즘에 활용해서 직접 코딩 해 볼 수있었다. 재귀함수는 말그대로 재귀적 상황에서 쓰면 좋을 것 같다. 즉 귀납적으로 해결할 수있는 문제가 발생햇을때 사용할만한 방식이라고 생각된다. 이진 탐색 알고리즘을 재귀적으로 구현해 보았다. 책에는 이미 예제가 있었지만 내 방식대로 코딩을 했다 역시 프로그램엔 뭔가 입력하는게 있어야 만드는 맛이 있다. #include int binarysearchalgol(int arr[], int first, int last, int target) { int mid; if (first > last) return -1; mid = (first + last) / 2; if (arr[mid] == target) ret..
재귀란 무엇인가에대해 배웠다. 예전부터 C코딩을하며 배우긴 했지만 책에있길래 복습차 한번 더 봤다. 앞으로 이틀은 더 보게될것같다. 역시 재귀의 전형적이고 기본적인 예로 팩토리얼 계산법을 보게되었다. 이젠 많이 이해하고 있는 상태라 처음 봤을때 처럼 당황스럽진 않고 자연스럽게 읽혔다. 왜 자료구조책에서 재귀가 나온고 하니 생각해보니 2학년 자료구조 시간에 트리 자료구조의 탐색알고리즘을 구현할때 재귀호출을 굉장히 많이 썼던 기억이 난다. 아마 그 선행과정으로 공부하게 되는 것같다.