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.0271 sec