U E D R , A S I H C RSS

Data Structure/Stack



1. Stack


  • ์Šคํƒ(Stack) : ๋‚˜์ค‘์— ๋“ค์–ด์˜จ๊ฒŒ ๋จผ์ € ๋‚˜๊ฐ. ๋ฐ‘์€ ๋ง‰ํ˜€ ์žˆ๊ณ  ์œ„๋งŒ ๋šซ๋ ค ์žˆ๋Š” ํ†ต์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋จ. ๋ฐ‘์„ ๋„๋ ค๋‚ด๊ณ  ๊บผ๋‚ผ์ˆ˜๋Š” ์—†๋Š” ๋…ธ๋ฆ‡์ด๋‹ˆ ์ง‘์–ด๋„ฃ์„๋•Œ๋„ ์œ„๋กœ, ๋บ„๋•Œ๋„ ์œ„๋กœ ๋นผ์•ผ๊ฒ ์ ธ?^^;;
  • top ํฌ์ธํ„ฐ๋Š” ๋งจ ๋‚˜์ค‘์— ์ง‘์–ด ๋„ฃ์€ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฅดํ‚ด.
  • ๋”ฐ๋ผ์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ถ”๊ฐ€๋˜๊ฑฐ๋‚˜ ์‚ญ์ œ๋ ๋•Œ๋งˆ๋‹ค topํฌ์ธํ„ฐ๊ฐ€ ๋ณ€ํ•˜๊ฒ ์ฃ ?^^;;

1.1. ๋ฐฐ์—ด๋กœ ์ง  ์Šคํƒ

~cpp 
class Stack
{
	enum {Size=100};
private:
	int data[Size];
	int top;
	bool IsEmpty();
	bool IsFull();
public:
	Stack() { top=-1; }
	bool Push(int ndata);
	bool Pop();
	void Show();
	~Stack() {}
};

bool Stack::IsEmpty()
{
	if(top==-1)
		return true;
	return false;
}

bool Stack::IsFull()
{
	if(top==Size-1)
		return true;
	return false;
}

bool Stack::Push(int ndata)
{
	if(!IsFull())
	{
		data[++top]=ndata;
		return true;
	}
	else
	{
		cout<<"๊ฝ‰ ์ฐผ๋‹ค";
		return false;
	}
}

bool Stack::Pop()
{
	if(!IsEmpty())
	{
		top--;
		return true;
	}
	else
	{
		cout<<"๋น„์—ˆ๋‹ค";
		return false;
	}
}

void Show()
{
	int temp=top;
	while(temp!=-1)
		cout<<data[temp--];
}

1.2. Linked List๋กœ ๋งŒ๋“  Stack

~cpp 
class Stack
{
private:
	struct Node
	{
		int m_nData;
		Node* m_pPrev;
	};
	Node* Head;		// ์•„๋ฌด๊ฒƒ๋„ ์—†๋Š” ํ—ค๋“œ ๋…ธ๋“œ ํ•˜๋‚˜ ์ƒ์„ฑ(์š”๊ฒŒ ์žˆ์œผ๋ฉด ์—„์ฒญ ํŽธํ•จ!)
	Node* top;
	bool IsEmpty();
public:
	Stack();
	void Push(int x);
	void Pop();
	void Show();
	~Stack();
};

Stack::Stack()
{
	Head=new Node;
	Head->m_pPrev=NULL;
	top=Head;
}

void Stack::Push(int x)
{
	Node* temp=new Node;
	temp->m_nData=x;
	temp->m_pPrev=top;
	top=temp;
}

bool Stack::Pop()
{
	if(!IsEmpty())
	{
		Node* temp=top->m_pPrev;
		delete top;
		top=temp;
		return true;
	}
	else
         {
                  cout<<"๋น„์—ˆ๋‹ค";
		return false;
         }
}

void Stack::Show() 
{
	Node* temp=top;
	while(!IsEmpty())
	{
		cout<<top->m_nData<<endl;
		top=top->m_pPrev;
	}
	top=temp;
}

bool Stack::IsEmpty() 
{
	if(top==Head)
		return true;
	return false;
}

Stack::~Stack()
{
	while(!IsEmpty())
	{
		Pop();
	}
	delete Head;
}

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:05
Processing time 0.0041 sec