• 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 : μŠ€νƒμ΄ 빈 μƒνƒœλ₯Ό λ§Œλ“ λ‹€.
  • 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 : 큐가 λΉ„μ–΄μžˆλŠ” μƒνƒœλ‘œ λ§Œλ“ λ‹€.
#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 λ°°μ—΄μ˜ μ„ μ–Έ

  1. char str1[10] = {β€˜a’, β€˜b’, …};
  2. char str2[10] = β€œabcdefg”;
  3. char* str3 = β€œabcdefg”;
  • 1, 2λŠ” μ„œλ‘œ κ°™κ³ , 3번의 κ²½μš°μ—λŠ” 1, 2번과 λ‹€λ₯Έλ‹€.
  • μ„ μ–Έν•œ 이후 str2[0] = β€œf”; λ₯Ό ν•˜λ©΄ 였λ₯˜κ°€ λ‚˜μ§€ μ•Šμ§€λ§Œ str3[0] = β€œf”; ν•˜λ©΄ 였λ₯˜κ°€ λ‚œλ‹€.
  • 3번의 ν¬μΈν„°μ˜ 경우 abcdefgλ₯Ό ν•˜λ‚˜μ˜ λ°μ΄ν„°λ‘œ μΈμ‹ν•˜κ³ , 데이터에 λŒ€ν•΄ read only κΆŒν•œμ„ κ°–λŠ”λ‹€.
  • λ•Œλ¬Έμ— 좜λ ₯ μžμ²΄λŠ” λ¬Έμ œκ°€ μ—†μ§€λ§Œ 문자λ₯Ό λ³€κ²½ν•˜λ €λŠ” 경우 였λ₯˜κ°€ λ°œμƒν•œλ‹€.

μ°Έκ³ λ¬Έν—Œ

μ—°κ²°λ¬Έμ„œ