분류 전체보기 (109) 썸네일형 리스트형 [단일연결리스트] 노드 정렬 삽입(오름차순) 노드를 정렬하면서 삽입을 할 때 기본적인 고려사항은 크게 4가지가 있다. 1. head == NULL2. 가장 작은 값 삽입3. 일반적인 경우4. 가장 큰 값 삽입 4가지 케이스 별로 오름차순으로 노드 정렬 삽입을 구현한 예제 코드이다. #include #include typedef struct node { int value; struct node* next;} node;node* head = NULL;void insertNodeSort() { node* newNode = (node*)malloc(sizeof(node)); scanf("%d", &newNode->value); newNode->next = NULL; //head == NULL 일떄 if (head .. [단일 연결 리스트 ] 특정 값 노드 삭제 | 중간 값 삭제 단일 연결 리스트에서 중간 위치에 있는 노드를 삭제할 때는 삭제한 노드 양 옆에 있는 노드들을 연결해주면 된다.그러나 head가 딸려있는 맨 첫번째 노드를 지울 때는 head 도 이동해야하기 때문에 첫 노드를 삭제하는 케이스, 중간 노드를 삭제하는 케이스 투스텝으로 나누어 코드를 작성하면 된다. 1. curNode 를 head의 위치로 맞추어준다. 2. head 를 두번째 노드의 주소 값을 가리키도록 한다. 1. curNode , preNode, head 를 첫 번째 노드 값에 집합시킨다. 2. curNode가 6번 노드를 가리키게 하고 target 값인지 확인한다. 3. preNode가 그 다음 노드를 가리킨다. 4. curNode 가 7번 노드를 가리키고 target 값이기 때문에 삭제한다... [단일 연결 리스트 ] 특정 값 노드 검색 4개의 노드 중 특정 노드의 값을 검색하고자 하는 경우의 코드 구현 방법에 대해 알아보자.curNode 가 전체 노드를 순회하고 원하는 노드의 값이 나오면 return, 나오지 않으면 NULL을 반환하면 된다. #include #include typedef struct node { int value; struct node* next;} node;node* head = NULL;node* searchNode(int target) { node* curNode; if (head == NULL) return NULL; //노드가 없으면 NULL 반환 curNode = head; while (curNode != NULL) { if (curNode->value =.. [단일연결 리스트] 전체 노드 삭제 단열 연결 리스트에서 전체 노드를 모두 삭제하는 방법을 그림을 통해서 설명해보겠다. 1. 4개의 노드 중 delNode 삭제할 첫 번째 노드를 가리킨다. 2. delNode 가 첫 번째 노드를 가리키고 있기 때문에 시작 노드를 가리키는 head 는 그 다음 값을 가리키도록 설정한다. 3. 1번 노드 삭제 후 delNode 가 2번 노드를 가리키도록 설정한다. 4. head 가 3번 노드를 가리키도록 설정한다. 5. 2번 노드를 지운 후 delNode 는 3번 노드를 가리킨다. 6. head 가 마지막 4번 노드를 가리킨다. 7. 3번 노드 삭제 후 delNode 는 마지막 4번 노드를 가리킨다. 8. head 는 그 다음 노드를 가리켜야 하는데 노드가 없으니까 아무것도 가리키지 않는 NULL 상태가 .. 특정 길이의 문자열을 비교하는 strncmp 함수 strncmp 함수는 #include 에 포함되어 있는 함수로, 두 문자열의 처음 n개의 문자를 비교하는 데 사용된다. 이 함수는 문자열 비교 시 메모리의 한계를 지정할 수 있어, 특정 길이까지 문자열을 비교해야 하는 경우 유용하다. strcmp는 문자열 전체를 비교하는데 사용되는 반면, strncmp는 부분 문자열도 비교할 수 있다. 함수 원형#include int strncmp(비교 문자열1, 비교 문자열2, 비교할 문자열 크기); 예제 코드 아래 예제 코드는 두 문자열을 정해진 길이만큼 비교하는 코드이다. #include #include // 문자열이 특정 접두사로 시작하는지 확인하는 함수int solution(const char* my_string, const char* is_prefix) { .. C 언어에서 문자열은 문자 배열로 취급된다. C 언어에서 문자열은 문자 배열로 취급된다. 문자열을 처리할 때 문자열 리터럴(예: "banana")은 기본적으로 문자열의 시작 주소를 가리키는 포인터로 사용된다. 포인터와 배열의 차이1. 포인터 사용:여기서 my_string은 "banana" 문자열의 시작 주소를 가리키는 포인터이다. 문자열 리터럴은 읽기 전용 메모리에 저장되며, my_string은 그 메모리 위치를 가리킨다. const char* my_string = "banana"; 2. 배열 사용:여기서 my_string은 문자열 "banana"의 복사본을 배열로 가지고 있다. 이 경우 문자열은 읽기 전용 메모리에 저장된 것이 아니라, 배열 my_string에 복사된다. const char my_string[] = "banana";왜 포인터를 .. [단일 연결 리스트] 첫 노드 삭제 첫 노드를 삭제하기 위해 del 이름의 메모리 공간을 할당한다. void delNode() {node* delNode = head; //delNode 에 head 값을 넣음 }만약 연결리스트가 만들어지지 않은 상태이면 삭제할게 없는거니까 함수를 종료한다. if (head == NULL) { return; } 만약 head 가 NULL 이 아닌 경우 head를 그 다음 노드로 옮겨준다. head = head->next; delNode 동적 메모리를 해제해서 첫 번째 노드 5번을 삭제한다. free(delnNode); typedef struct node {int value;struct node* next;}node;node* head = NULL; void delNode() {node* delNode = .. [단일 연결 리스트] 노드 맨 뒤 삽입 노드 맨 앞 삽입과 반대로 새로운 값이 제일 뒤에 붙는 연결 리스트이다. 노드 맨 뒤 삽입은 N만큼의 데이터가 있으면 N만큼 순회를 하기 때문에 O(N)의 시간 복잡도를 가지게 된다. 이를 구현하기 위해서는 일단 내가 연결하고자 하는 노드가 첫 번째 노드인지 아닌지 판별해야 하고 newNode가 NULL을 가리키기 해서 첫 번째 노드와 연결시켜준다. 그 다음 head 가 빈 값이라면 newNode 값을 넣어서 head가 첫번째 노드를 가리키게 한다. typedef struct node{ int value; struct node* next;}node;node* head = NULL; // 초기값을 NULL로 설정void insert_node_rear() { node* newNode; newNode =.. 이전 1 ··· 4 5 6 7 8 9 10 ··· 14 다음