전체 글
-
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를 쓰므로써, 다시 바꿔야 하는 수고스러움을 덜수 있습니다. 작지만 크게 배웠네요.
-
linkedlistProgramming/C,C++ 2012. 10. 18. 09:14
List는 구조가 단순하여 가장 널리 사용되는 기초적인 자료구조순서대로 저장하는 자료구조 -> 여러 개의 자료가 일직선으로 서로 연결된 '선형 구조' Ex) 리스트의 구조문자열: 'Data'D-a-t-a문자열이 순서대로 저장되는 선형구조 리스트의 추상 자료형 리스트의 추상 자료형 입니다. 추상자료형에 제가 만들 list의 함수들과 역활등이 정해져 있습니다. 리스트는 배열 리스트와 포인트를 이용하여 구현하는 연결리스트 두 가지로 나눌 수 있습니다. 배열 리스트는 미리 크기를 정해줘야 하지만연결 리스트는 미리 크기를 정해줄 필요가 없습니다(새로운 원소를 추가할 경우 동적으로 원소를 생성하고 포인터로 이어주기만 하면 됩니다.) 연결 리스트 연결리스트의 노드는 자료를 저장하는 부분(data)와 링크를 저장하는 ..
-
10474 - Where is the Marble?카테고리 없음 2012. 9. 29. 23:30
이 문제에서 왜 저딴 배경지식을 써놨는지는 모르겠다. 하지만 그냥 Sort하고 해당 값의 위치를 출력하면 끝인 문제이다. 가끔 UVA에 이런 문제가 있는 듯 하다. input을 보면 4 123515 인데 처음 4개가 기준 배열이고 뒤에 1개가 찾을 값이다.해당 값이 있으면 위치 출력하고 없으면 not found 출력하면 된다. 소스코드 #include #include using namespace std; int compare (const void * a, const void * b){ return ( *(int*)a - *(int*)b );} int main(){ int t_case, f_case, cnt; bool flag = false; cnt = 1; while(cin>>t_case>>f_case)..