Stack의 개념과 구현
Language/자료구조2021. 12. 6. 14:30Stack의 개념과 구현

- 일종의 리스트 - 단, 데이터의 삽입과 삭제가 한쪽 끝에서만 이루어짐 - LIFO( Last-In, First-Out ) - 삽입/삭제가 일어나는 쪽을 스택의 top이라고 부른다. - push : 스택에 새로운 원소를 삽입하는 연산 - pop : 스택의 top에 있는 원소를 스택에서 제거하고 반환 - peek : 스택 top의 원소를 제거하지 않고 반환 - empty : 스택이 비었는지 검사 - 입력 수식의 괄호가 올바른지 검사 예) [a+b*{c/(d-e)}] + (d/e) - 단순히 여는 괄호와 닫느 괄호의 개수 비교 만으로는 부족 - 스택을 이용하여 검사 - 여는 괄는 스택에 push - 닫는 괄호가 나오면 스택..

[16] C review < 이중연결리스트 Music Library Program 기본동작들 >
Language/자료구조2021. 11. 29. 14:04[16] C review < 이중연결리스트 Music Library Program 기본동작들 >

이제부터 이중연결리스트를 응용한 알고리즘을 살펴보겠습니다. 다음은 Music Library Program의 실행예입니다. 다음은 저장된 음악 프로그램 목록입니다. 아티스트와 음악 저장경로를 구분하기위해 #을 사용하였습니다. 다음은 Artist,Song,path간에 자료구조를 나타낸 그림입니다. 좀 더 자세히 살펴보면, Artist 노드안에 이중연결리스트로 구현된 SNode가 존재하고 하나의 SNode안에 Song노드가 존재하여 해당 Song의 정보를 나타내고 있습니다. 여기서 주의해야 할 점은 Song은 SNode안의 하나의 데이터일 뿐 연결리스트가 아닙니다. 이처럼 번거롭게 자료구조를 편성한 이유는 즉, 노드와 데이터를 분리하는 이유는 노래들에 대해서 다양한 접근경로를 제공하기 위해서입니다. 예를들어 ..

[15] C review < 이중연결리스트 > 과제 수정 필요
Language/자료구조2021. 11. 29. 11:49[15] C review < 이중연결리스트 > 과제 수정 필요

단방향 연결 리스트(single linked list)의 한계 - 어떤 노드의 앞에 새로운 노드를 삽입하기 어려움 - 삭제의 경우에 항상 삭제할 노드의 앞 노드가 필요 - 단방향의 순회만이 가능 이중 연결 리스트 - 각각의 노드가 다음(next)노드와 이전(previous)노드의 주소를 가지는 연결 리스트 - 양방향의 순회(traverse)가 가능. 각 노드에 하나의 문자열이 저장된다고 가정하자. #include #include struct node { char *data; struct node next; struct node prev; }; typedef struct node Node; Node *head; Node *tail; int size = 0; 노드를 삽입하는 경우를 알아봅시다. 이 과정은 순..

[1] C review < 동적메모리 할당 >
Language/자료구조2021. 11. 15. 19:49[1] C review < 동적메모리 할당 >

변수를 선언하는 대신 프로그램의 요청으로 메모리를 할당할 수 있다. 이것을 동적 메모리 할당이라고 부릅니다. malloc 함수를 호출하여 동적메모리할당을 요청하면 요구하는 크기의 메모리를 할당하고 그 시작 주소를 반환합니다. malloc함수의 리턴값이 주소값이므로 당연히 포인터 변수를 사용해야 합니다. 동적으로 할당된 배열은 공간이 부족할 경우 더 큰 배열을 할당하여 사용할 수 있습니다. 엄밀히 말하면 배열의 크기를 확장할 수 없습니다. 더큰 배열을 새롭게 만들어서 대체하는 방식으로 접근해야 합니다. 배열의 확장을 코드로 살펴봅시다. #include #include int main(void) { int* array = (int*)malloc(4 * sizeof(int)); array[0] = 1; arr..

image