Programming/C,C++
-
LinkedQueueProgramming/C,C++ 2012. 11. 18. 13:20
오랜만에 포스팅입니다.오늘은 LinkedList로 만든 Queue입니다. Queue는 우리 일상 생활에도 많이 존재합니다.예를 들어서 은행에서 먼저 온사람이 먼저 서비스 받고, 나중에 온 사람이 나중에 서비스 받는 구조입니다.즉, 선입선출의 특성을 지닙니다.(First - In - First - Out , FIFO) 먼저 들어온게 먼저 나가고, 나중에 들어온게 나중에 서비스를 받습니다.Queue를 구현하는 방법은 많이 있습니다만, 저는 여기서 LinkedList를 가지고 구현해보도록 하겠습니다.(이유는 배열로 구현한 것은 미리 Queue의 크기를 정해야 하지만 LinkedList는 그럴 필요 없기 때문입니다. 또 한가지 이유는 제가 요즘 포인터에 대해서 좀 더 친숙해 질려고 노력중이기 때문입니다.)Que..
-
string.h에 대한 연구Programming/C,C++ 2012. 10. 29. 09:13
2012.10.29오늘은 strlen과 strcpy에 대해서 쓸까 합니다. 1. strlensize_t strlen(const char *s)입력 파라미터가 const char *s이며, 결과값은 문자열의 길이입니다. 즉, '\0' 만나기 전까지의 길이를 계산합니다. ex)cha pSource[] = "ABC";size = strlen(pSource); 결과는 3입니다. 0 1 2 3 A B C \0 '\0'전인 C의 위치까지의 길이를 계산해서 넘겨줍니다. 다만, 이 함수를 쓸때는 먼저 문자열의 NULL여부를 검사해주세요. NULL이면 강제 종료된답니다.2. strcpy strcpy는 char문자열을 복사하는 함수입니다.strcpy(dest, source)역시 말보다는 예제를 보면서 설명이 쉽겠네요.ex..
-
LinkedList로 구현한 StackProgramming/C,C++ 2012. 10. 28. 14:08
배열로 구현한 Stack에 이어서 오늘은 LinkedList로 구현한 Stack을 구현하겠습니다~ 배열로 구현한 Stack와 다른점은 maxElementcount가 없습니다. 즉, 링크 주소만 쭉 연결해주면 제한이 없다는 점입니다. linkedlistStack.h#ifndef _LINKED_STACK_#define _LINKED_STACK_ typedef struct StackNodeType{ int data; struct StackNodeType* pLink;}StackNode; typedef struct LinkedListStack{ int currentElementCount; StackNode* pTopElement;}LinkedStack; LinkedStack* createLinkedStack()..
-
포인터(Pointer) 기본 정리Programming/C,C++ 2012. 10. 28. 10:52
오늘은 C 언어의 꽃, Pointer에 대해서 정리해 보려고 합니다. C언어를 처음 접하는 유저이면 한번은 거쳐야할 관문이며, 저 역시 배울때 어려움을 겪었습니다. 지금와서 공부해보면 별거 아닌거 같지만, 아직도 포인터는 헷갈리기는 마찬가지입니다. 다만, 한가지 조언을 하자면 포인터는 그림을 그려보면 쉽습니다! 1. 포인터의 개념 : 포인터는 메모리 주소값을 저장하는 변수를 말합니다. 즉, 변수들의 물리적 주소를 저장합니다. 2. 포인터 선언 및 연산 int *ptr_arr = NULL; 자료형 : int*연산자 : *변수 이름 : ptr_arr 여기서 잠깐!포인터는 항상 NULL로 초기화 합니다. 포인터 변수는 메모리 주소에 직접 접근하기 때문에 프로그램의 안정성 차원에서 NULL로 값을 초기화 시켜주..
-
배열로 구현한 StackProgramming/C,C++ 2012. 10. 27. 19:48
오늘은 배열로 구현한 Stack을 포스팅 하려고 합니다. Stack : 자료를 한 방향으로만 쌓는 구조입니다. 앞에서 배운 리스트는 양방향으로 자료를 집어 넣고 , 뺄 수 있었지만 스택은 오직 한방향에서만 가능합니다. 스택에서는 오직 맨 위에다가만 자료를 추가할 수 있습니다. 이를 Push라고 합니다. 또한, 스택에서 자료를 꺼내는 것을 Pop라고 합니다.(현재 top에 있는 자료를 꺼내오겠죠!)그래서 스택은 다른말로 LIFO(Last - In - First - Out) 맨 마지막에 들어와서 마지막 원소가 가장 먼저 나가는 특성을 지닙니다. 기본적으로 배열로 구현한 Stack에서는 크기를 지정해줘야 합니다. 배열로 구현한 스택의 단점은 크기를 미리 지정하고, 그 지정한 크기가 넘어가면 Overflow가 ..
-
DoubleLinkedList(이중연결리스트)Programming/C,C++ 2012. 10. 21. 20:33
이번에는 이중연결리스트 입니다. 단일 연결리스트에 비해서 이중 연결리스트는 두개의 포인터가 존재합니다. 기존의 연결리스트가 오른쪽 링크(Right Link)만 있었다면 이중 연결리스트는 이전의 노드를 가지는 왼쪽 링크(Left Link)를 가지게 됩니다. 이러한 양방향 링크는 이전 노드에 직접적 접근이 가능하다는 접근 편의성의 장점이 있지만 동시에 추가 메모리 공간을 사용한다는 단점이 있습니다. 단일연결리스트를 구현할 때는 Header 포인터만 사용했지만, 이중 연결리스트를 구현할 때는 Header 노드를 사용해야 합니다. 이유는 오른쪽 링크과 왼쪽 링크에 각각 연결 리스트의 첫 번째 노드와 마지막 노드를 가르키는 포인터 값을 저장하며 , 이를 통해 구현의 편리함을 느낄 수 있습니다. 일반적으로,pNod..
-
CircularList 구현Programming/C,C++ 2012. 10. 21. 14:23
오늘은 원형리스트(circularList)에 대해서 정리해보겠습니다. 일반적으로 단일리스트와 다르게 원형 리스트는 맨마지막 노드의 링크가 NULL이 아니라 맨 처음 노드와 연결되어 있습니다.원형리스트의 첫 번째 노드의 위치 값(position)은 0이며, 마지막 노드의 위치의 인덱스는 CurrentElementCount -1 입니다. 그러면 어떻게 원형리스트를 순환하면서 이게 첫번째인지, 마지막 노드인지 알수 있을까요?이런 문제를 해결하기 위해서 HeaderNode가 하나 존재합니다. 즉, pPreNode == HeaderNode->link 현재 찾고 있는 노드와 헤더노드와 가르키는 곳이 동일하다면 pPreNode는 현재 마지막 노드에 있다는 것을 알 수 있습니다. 이번 원형 리스트 또한 분할 컴파일을 ..
-
작지만 큰 차이!Programming/C,C++ 2012. 10. 18. 14:22
linkedlist를 구현하면서 addLLElement()함수를 보면 다음과 같은 내용이 있습니다. *pNewNode = element; 과연 왜 이렇게 쓴것 일까요? pNewNode -> data = element.data로 쓰면 안되는 것일까요? 이렇게 하는 이유는 만약 ListNode에 새로운 원소, 즉 data 말고 다른 자료형을 하나 더 추가한다면 코드가 한줄 더 늘어나야합니다. 하지만 *pNewNode = element를 쓰므로써, 다시 바꿔야 하는 수고스러움을 덜수 있습니다. 작지만 크게 배웠네요.