반응형

정글

1. 연결 리스트를 이용해 스택 만들기 큐는 선입선출(FiFO : First In, First Out)이고, 스택은 후입선출(LIFO : Last In, First Out)이므로 구현이 약간 다름 void createStackFromLinkedList(LinkedList *ll, Stack *s) { ListNode *cur = ll->head; ListNode *cur_s = s->ll.head; ListNode *new_node; if (cur == NULL) { return; } while (cur != NULL) { // 새로운 노드를 만들고 메모리 할당을 받아 주소를 저장 new_node = malloc(sizeof(ListNode)); // 스택에 노드가 있는 경우 if (s->ll.head ..
1. 연결 리스트를 이용해 큐를 만들기 큐에 첫 번째 노드를 생성하는 경우(큐가 비었을 경우) 큐가 비지 않고 노드가 있는 경우로 나누어서 노드를 추가 void createQueueFromLinkedList(LinkedList *ll, Queue *q) { ListNode *cur = ll->head; ListNode *tail, *new_Node = NULL; if (cur == NULL) { return; } while (cur != NULL) { // 새로운 노드에 메모리를 할당 받아 주소값을 저장 new_Node = malloc(sizeof(ListNode)); if (q->ll.head == NULL) { // 큐가 비었다면 연결 리스트의 cur값의 item을 new_Node의 item에 저장 ..
1. 홀수를 가진 노드를 뒤로 넣어 정렬하기 해결하지 못한 문제 분석하다가 홀수를 처리하는 과정에서 포인터를 이상한 곳에 지정해 세그멘테이션 폴트 발생 꼬리가 현재 노드(홀수)를 next로 가리킴 현재(홀수)의 전 노드가 현재(홀수)의 next를 가리킴 현재(홀수)의 next를 지움(NULL) cur를 이전 노드로 이동 꼬리 노드를 현재(홀수) 이동시킨 노드로 이동 void moveOddItemsToBack(LinkedList *ll) { ListNode *cur, *prev, *tail; cur = ll->head; int size = ll->size; while (cur != NULL) { prev = cur; cur = cur->next; tail = prev; } cur = ll->head; pr..
1. 정렬하면서 노드 삽입하기 ll->head가 없는경우 가장 작은 수가 들어오는 경우 중간 크기의 수가 들어오는 경우 가장 큰 수가 들어오는 경우 int insertSortedLL(LinkedList *ll, int item) { ListNode *pre, *cur, *temp; if (ll->head == NULL) { cur = ll->head; ll->head = malloc(sizeof(ListNode)); ll->head->item = item; ll->head->next = NULL; ll->size++; printf("Head 추가\n"); return 0; } cur = ll->head; pre = NULL; while (cur != NULL) { if (cur->item == item)..
알고리즘 문제풀이 9655. 돌 게임 돌이 3개 이하인 경우에는 1개씩 밖에 못가져감 그렇기 때문에 1일 때는 SK가, 2일때는 CY가 승리 돌의 개수가 홀수일때는 먼저 하는 사람이 이김(SK), 짝수일 경우 뒤에 하는 사람이 이김(CY) import sys input = sys.stdin.readline n = int(input()) if n < 3: if n == 1: print("SK") elif n == 2: print("CY") elif n % 2 == 1: print("SK") elif n % 2 == 0: print("CY") 2839. 설탕 배달 5로 나뉘어질 때까지 3을 빼고 카운트 1개 증가 5와 3으로 나누어 떨어지지 않는 경우에는 -1 출력 import sys input = sys...
어셈블리어 기본 문법 대표적인 명령어(Instruction) MOV: A의 값을 B의 값으로 옮깁니다. MOV EAX, 100은 EAX에 100이라는 값을 넣습니다. 다만 구체적인 연산을 포함할 수 없습니다. LEA: A의 값을 B의 값으로 연산을 포함하여 복사합니다. LEA EAX, [EAX + 1000]은 EAX에 1000을 넣은 값을 다시 EAX에 삽입합니다. 이처럼 연산을 포함할 수 있습니다. JMP: 특정한 위치로 건너 뛰어 코드를 실행합니다. JMP A라고 하면 A의 위치로 뛰어서 코드가 실행됩니다. 비슷하게 조건 점프 명령도 존재합니다. JA, JB, JE 등의 명령어는 두 인자를 받아서 비교한 뒤에 결과에 따라서 다른 방향으로 점프할 수 있습니다. CALL: 함수를 호출했다가 다시 원래 위..
스택과 레지스터 스택(stack) 프로시저 호출 시 지역변수와 매개변수를 저장하기 위한 메모리 공간 선언되는 순서와 반대로 메모리가 해제되는 LIFO(LastInFirstOut)구조용도 함수의 로컬 변수 저장 : 각 함수 호출 시 그 함수의 로컬 변수들이 스택에 저장 함수의 제어흐름 관리 : 함수가 다른 함수를 호출할 때, 반환주소와 이전함수의 스택프레임 정보가 스택에 저장장점 동적으로 메모리를 할당하고 해제할 수 있음 구현이 간단하며, 메모리 관리 overhead가 낮음 레지스터(register) 프로세서 내부의 고속작동 메모리로, 프로시저 실행 중. 자주 접근하는 변수나 중간 계산값을 저장하기 위해 사용 용도 중간 연산결과의 저장 : 연산 중 생성되는 중간 값을 빠르게 저장하고 접근하기 위해 사용 빠..
반응형