- toc {:toc}
Stack
-
Stack at the logical level
-
Stack : μμκ° μλ λμΌν νμ μ μμλ₯Ό κ°λλ€. μμμ μΆκ°μ μ κ±°λ₯Ό νλμ μ ꡬλ§μΌλ‘ μννλ€.
-
μ€νμ LIFO(Last In First Out)ꡬ쑰μ΄λ€. ex) λ€λ‘κ°κΈ°, λλ리기기
-
Stack ADT Operations
- Transformers
- Push : μ€νμ΄ fullμ΄λ©΄ μ€λ₯λ₯Ό λ°μμν¨λ€. κ·Έλ μ§ μμΌλ©΄ μλ‘μ΄ μμλ₯Ό topμ μΆκ°νλ€.
- Pop : μ€νμ΄ emptyλ©΄ μ€λ₯λ₯Ό λ°μμν¨λ€. κ·Έλ μ§ μμΌλ©΄ topμ μμλ₯Ό μ κ±°νλ€.
- Observers
- IsEmpty : μ€νμ΄ νμ¬ λΉμλμ§λ₯Ό νμΈνλ€.
- IsFull : μ€νμ΄ νμ¬ κ½ μ°¨μλμ§λ₯Ό νμΈνλ€.
- Top : μ€νμ΄ emptyλ©΄ μ€λ₯λ₯Ό λ°μμν¨λ€. κ·Έλ μ§ μμΌλ©΄ topμ μμλ₯Ό 볡μ¬ν΄ λ°ννλ€.
- Iterator
- MakeEmpty : μ€νμ΄ λΉ μνλ₯Ό λ§λ λ€.
- Transformers
-
Class templete
-
ν νλ¦Ώμ νμ νλΌλ―Έν°λ₯Ό μ¬μ©νμ¬ μ¬λ¬ λ²μ μ ν΄λμ€ νμ μ λ§λ€ μ μλλ‘ λ§λ€μ΄μ€λ€.
-
ν νλ¦Ώμ λν μ€μ νλΌλ―Έν°λ λ°μ΄ν° νμ μ΄λ€. Built-in λλ user-defined μ΄λ μ¬μ© κ°λ₯νλ€.
#include "ItemType.h"
templete<class ItemType>
class StackType{
public:
StackType();
bool IsEmpty() const;
bool IsFull() const;
void Push(ItemType item);
void Pop(ItemType& item);
ItemType Top();
private:
int top;
ItemType items[MAX_ITEMS];
}Queue
-
Queue at the logical level
-
Queue : νλ μμκ° μλ λμΌν μμλ₯Ό μ μ₯νλ ꡬ쑰μ΄λ€. ν μͺ½ λ(λ€)μμ μλ‘μ΄ μμκ° μΆκ°λκ³ , ν μͺ½ λ(μ)μμ μλ‘μ΄ μμκ° μ κ±°λλ€.
-
νλ FIFO(first in first out) ꡬ쑰λ₯Ό κ°λλ€. ex) λ²νΌ
-
Queue ADT Operations
- Transformers
- Enqueue : μλ‘μ΄ μμλ₯Ό νμ λ€μ μΆκ°νλ€.
- Dequeue : νμ μμ μλ μμλ₯Ό μ κ±°νκ³ ν΄λΉ μμλ₯Ό λ°ννλ€.
- Observers
- IsEmpty : νκ° νμ¬ λΉμλμ§λ₯Ό κ²°μ νλ€.
- IsFull : νκ° νμ¬ κ°λ μ°¨ μλμ§λ₯Ό κ²°μ νλ€.
- Iterator
- MakeEmpty : νκ° λΉμ΄μλ μνλ‘ λ§λ λ€.
- Transformers
#include "ItemType.h"
templete<class ItemType>
class QueType{
public:
QueType();
QueType(int max);
~QueType();
bool IsEmpty() const;
bool IsFull() const;
void Enqueue(ItemType item);
void Dequeue(ItemType& item);
private:
int front;
int rear;
int maxQue;
ItemType* items; // λμ λ°°μ΄ ν λΉ, μ μ€νλ λμ λ°°μ΄ ν λΉ ν΄λ 무κ΄νλ€.
}Pointer Variable
-
Pointer Variable : λ©λͺ¨λ¦¬μμ κ°μ΄ λ³μμ μ£ΌμμΈ λ³μμ΄λ€.
-
ν¬μΈν° λ³μλ₯Ό μ μΈνκΈ° μν΄ ν¬μΈν°κ° κ°λ¦¬ν€λ κ°μ μλ£ν, νμ μ λͺ μν΄μΌ νλ€.
- ex) int* ptr;
-
Address operator(&) : μ£Όμ μ°μ°μλ ν΄λΉ κ°μ΄ λ©λͺ¨λ¦¬ μμμ μμΉν μ£Όμλ₯Ό λ°ννλ€.
int x = 10; int* ptr = &x; cout << &ptr; // print : 10 -
NULL Pointer : null κ°μ μ μ₯ν ν¬μΈν°. C++μμ nullλ‘ μ§μ νλ €λ©΄ 0μΌλ‘ μ΄κΈ°ννκ±°λ ν λΉνλ©΄ λλ€.
-
ν¬μΈν°λ μΈμ€ν΄μ€ν λ λ κ°μ΄ ν λΉλμ§ μμΌλ©΄ ν¬μΈν°λ κΈ°λ³Έμ μΌλ‘ μ΄λ€ κ°λΉμ§ μ£Όμλ₯Ό κ°λ¦¬ν¨λ€.
-
Allocation of memory
- Static Allocation - μ μ ν λΉμ μ»΄νμΌ μκ°μ λ©λͺ¨λ¦¬ 곡κ°μ μ μ νλ€.
- Dynamic Allocation - λμ ν λΉμ new μ°μ°μλ₯Ό μ¬μ©ν¨μΌλ‘μ¨ λ°νμμ λ©λͺ¨λ¦¬ 곡κ°μ μ μ νλ€.
-
νλ‘κ·Έλ¨ λ°μ΄ν°μ μΌμμ 3κ°μ§ μ’ λ₯
-
Static data : λ©λͺ¨λ¦¬ ν λΉμ νλ‘κ·Έλ¨μ μ€ν λμ μ‘΄μ¬νλ€. νλ‘κ·Έλ¨ μ’ λ£ μ κΉμ§λ μμ΄μ§μ§ μλλ€. β μ§λ¬Έ : static dataλ μ΄λμ μ μ₯λλ?, ν΄μ λ μΈμ λλκ°?, μ μλ³μ μ·¨κΈμ λ°λκ°?
-
Automatic data : ν¨μ μμ λ¨κ³μμ μλμ μΌλ‘ λ§λ€μ΄μ§κ³ λ°ν μμ μ’ λ£λλ€.
-
Dynamic data : new, delete μ°μ°μλ₯Ό μ¬μ©νμ¬ λͺ μμ μΌλ‘ ν λΉ, ν΄μ νλ€.
λμ ν λΉ
- new operator : λ§μ½ νμ λΉ κ³΅κ°μ μ΄μ© κ°λ₯νλ€λ©΄ λ©λͺ¨λ¦¬κ° μμ²λ κ°μ²΄λ λ°°μ΄μ ν λΉνκ³ ν¬μΈν°λ₯Ό λ°ννλ€.
- κ·Έλ μ§ μμΌλ©΄ null pointer 0μ λ°ννλ€.
- λμ μΌλ‘ ν λΉλ κ°μ²΄λ delete μ°μ°μλ‘ ν΄μ ν λκΉμ§ μ‘΄μ¬νλ€.
char* ptr;
ptr = new char;
*ptr = 'B';
delete ptr;- deleteνλ©΄ ptrμ΄ κ°λ¦¬ν€λ ν λΉλ μ£Όμκ° μ¬λΌμ§κ³ , nullκ°μ΄ λ€μ΄κ°λ€.
char λ°°μ΄μ μ μΈ
- char str1[10] = {βaβ, βbβ, β¦};
- char str2[10] = βabcdefgβ;
- char* str3 = βabcdefgβ;
- 1, 2λ μλ‘ κ°κ³ , 3λ²μ κ²½μ°μλ 1, 2λ²κ³Ό λ€λ₯Έλ€.
- μ μΈν μ΄ν str2[0] = βfβ; λ₯Ό νλ©΄ μ€λ₯κ° λμ§ μμ§λ§ str3[0] = βfβ; νλ©΄ μ€λ₯κ° λλ€.
- 3λ²μ ν¬μΈν°μ κ²½μ° abcdefgλ₯Ό νλμ λ°μ΄ν°λ‘ μΈμνκ³ , λ°μ΄ν°μ λν΄ read only κΆνμ κ°λλ€.
- λλ¬Έμ μΆλ ₯ μ체λ λ¬Έμ κ° μμ§λ§ λ¬Έμλ₯Ό λ³κ²½νλ €λ κ²½μ° μ€λ₯κ° λ°μνλ€.