목록알고리즘/자료구조 (19)
쌓고 쌓다
큐(Queue) : FIFO(First In First Out) 구조로, 먼저 들어온 데이터가 먼저 나가는 자료구조이다. 선형 큐의 문제점 사용하며 front, rear 값이 계속 증가하여 앞부분이 비어있음에도 불구하고 더 이상 삽입이 불가능한 경우가 생긴다. 위와 같은 공간 낭비가 이루어 진다. 위의 문제를 해결하기 위해 요소를 계속 이동시켜 줄 수도 있지만 비효율적이다. 해결방법 : 원형 큐를 구현해 사용하자. 변수 #define MAX_SIZE 10 typedef int element; typedef struct { element queue[MAX_SIZE]; int front; int rear; }QueueType; front : 첫 번째 요소의 하나 앞의 인덱스이다. ( 초기값 : 0 ) re..
스택의 특징 LIFO ( Last-In First-Out ) : 후입선출로 가장 늦게(최근에) 들어온 데이터가 가장 먼저 나감 프링글스 통을 스택이라고 생각하자 스택 ADT is_empty(s) : 스택이 비어있는지 검사 is_full(s) : 스택이 가득 찼는지 검사 push(s, e) : 스택의 맨 위에 요소 e를 추가 pop(s) : 스택 맨 위의 요소 삭제 스택 생성 #define MAX_SIZE 10 typedef int element; // 추후 int형 스택을 다른 자료형으로 바꿀때 이부분만 수정하면 편리함 typedef struct { element stack[MAX_SIZE]; int top; }StackType; init 함수 void init(StackType* s) { s->top ..
희소행렬을 2차원 배열을 통해 전체를(0도 포함해서) 저장해버리는 방법 장점: 행렬의 연산이 간단해진다. 단점: 대부분의 항이 0인데 메모리 낭비이다. 0이 아닌 요소들만 구조체를 이용해서 저장하자 장점: 메모리 공간 절약 단점: 행렬의 연산들의 구현이 복잡 아래의 코드는 구조체를 이용해 0이 아닌 요소들만 있는 행렬의 덧셈을 하는 코드이다. #include using namespace std; #define ROWS 3 #define COLS 3 #define MAX_TERMS 10 typedef struct Element { int row; int col; int value; }Element; typedef struct sparse_matrix { Element data[MAX_TERMS]; int ..