C++20 [C++]Doubly linked list with sentinel nodes 1. 설명 : head와 tail이 직접 리스트의 첫번째 노드와 마지막 노드를 가리키는 것이 아닌 sentinel node로 설정하여 각각의 next/prev 노드가 첫번째 노드와 마지막 노드를 가리키게 함으로써 노드 삽입/삭제 구현을 좀 더 용이하게함 1-1. 함수 구성 begin : 리스트의 첫 번째 노드 (연결리스트의 head 노드의 next노드) end : 리스트의 마지막 노드가 아닌 마지막 노드를 지나간 다음의 노드 (연결리스트의 tail 노드) → 어떤 노드가 마지막 노드인지 알려면 next노드가 NULL인지 판단하는 게 아닌 tail노드인지 판단 isEmpty : 연결리스트가 비어있는지 판단 last : 리스트의 마지막 노드 Size : 리스트의 노드의 개수 ( 데이터가 있는 실질적인 노드 .. 2023. 11. 29. [c++] 연결리스트 이용한 다항식 덧셈/뺄셈/곱셈 1. 다항식 구성 : 계수 + 차수 ( 음수도 구별하도록 코드 작성하였음) : string으로 식을 입력하면 (계수 + 차수)를 하나의 노드로 묶어 연결리스트에 삽입하는 setNode함수 작성 ( 단, 식을 입력할 때 띄어쓰기 불가능하고 내림차순으로 작성해야함 ) 1-1. 케이스 : string의 문자 하나씩 반복문 돌려가며 노드 구성하여 삽입 : string[i] (i=0~len-1) 음수 판별 : bool 자료형을 통해 default값을 false로 해놓고 음수인 경우 true로 설정하여 노드를 삽입할 때 true인 경우에 음수로 변환하여 노드 삽입 → 계수가 1인 특수 케이스 고려 : goto문 이용하여 바로 차수 구하는 코드로 이동 숫자인 경우 → 2자리 숫자이상인 케이스 고려 → 차수가 0/1 .. 2023. 11. 28. [C++] 연결리스트에서 중복 노드 제거 1. 알고리즘 설명 : 정렬되지 않고 중복값이 존재하지않은 연결리스트에서 중복 노드를 제거 2. 구현 방법 2-1. 버퍼 이용 : Hash-set 이용 → 연결리스트를 순회하면서 해당 노드를 hash-set에 저장해두었다가 후에 어떤 노드를 보았을 때 hash-set에 이미 값이 존재한다면 중복되는 노드이므로 그 노드는 삭제하는 작업 수행 2-1-1. Hash-set : C++ STL 이용 ( 해싱 자료구조에 대해선 추후에 자세히 공부 할 예정 ) #include → unordered_set 객체명; 이때, index로 접근할 수 없고 iterator로 접근 키 값 중복 허용하지않음 https://cplusplus.com/reference/unordered_map/unordered_map/ https:/.. 2023. 11. 27. [C++] 연결리스트 분할 1. 알고리즘 설명→ 다음과 같이 연결리스트가 주어지면 두 개의 연결리스트로 나눈다 (이때, 노드의 갯수가 홀수일땐 가운데 기준 노드는 후면 연결리스트에 삽입되도록 함) → 짝수/홀수 케이스 나눌 필요 없어짐 1-1. 구현Linked_list.h#pragma once #include using namespace std; class Node { private: int data; Node* link; public: Node(int item, Node* next) :data(item), link(next) { } Node(int item) : data(item), link(NULL) { } int getData() { return data; } Node* getLink() { return link; } fri.. 2023. 11. 23. [C++] Reverse_Linked_List (LeetCode 206 문제) https://leetcode.com/problems/reverse-linked-list/description/ Reverse Linked List - LeetCode Can you solve this real interview question? Reverse Linked List - Given the head of a singly linked list, reverse the list, and return the reversed list. Example 1: [https://assets.leetcode.com/uploads/2021/02/19/rev1ex1.jpg] Input: head = [1,2,3,4,5] O leetcode.com => 위 사진과 같이 singly-linked-list를 뒤집는 작.. 2023. 11. 23. [c++] 스택 활용한 수식 계산 2023.09.15 - [C/알고리즘] - 스택 응용(수식 계산) 스택 응용(수식 계산) 1. 수식표기법 (1) 중위표기법(infix notation) : 연산자를 피연산자의 가운데 표기하는 방법 => 우리가 사용하는 방식 ex) A+B (2) 후위표기법(postfix notation) : 연산자를 피연산자 뒤에 표기하는 방법 => 컴 growingupis.tistory.com => 해당 알고리즘의 자세한 내용은 위의 글에 기재되어있다 1-1. 스택 구현 클래스 Stack.h #pragma once #define MAX_SIZE 100 #include template class Stack { private: T stack[MAX_SIZE]; int top; public: Stack():top(-1) { .. 2023. 11. 16. 이전 1 2 3 4 다음