~cpp 
#include <iostream.h> 
struct node{ 
	int data; 
	node * node_pointer; 
}; 
node * INSERT(node * head_pointer, int num); 
node * DELETE(node * head_pointer); 
int main() 
{ 
	//스택의 처음을 가르킨는 포인터 
	node * head_pointer = new node; 
	//처음을 가르키는 포인터를 초기화 
	head_pointer = NULL; 
	int num, choice; 
	//선택모드 
	cout << "스택을 만들어봐요!!\n"; 
	cout << "1.push 2.pop 3.exit\nchoice : "; 
	cin >> choice; 
	while(choice != 3) 
	{ 
		switch(choice) 
		{
		case 1://push 
			cout << "push num : "; 
			cin >> num; 
			head_pointer = INSERT(head_pointer, num); 
			break; 
		case 2://pop 
			head_pointer = DELETE(head_pointer); 
			break; 
		} 
		cout << "\n스택을 만들어봐요!!\n"; 
		cout << "1.push 2.pop 3.exit\nchoice : "; 
		cin >> choice; 
	} 
	return 0; 
} 
//스택에 자료를 넣는다 
node * INSERT(node * head_pointer, int num) 
{ 
	node * temp = new node; 
	//처음으로 스택에 자료를 넣을때 
	if(head_pointer == NULL) 
	{ 
		head_pointer = temp; 
		head_pointer->data = num; 
		head_pointer->node_pointer = NULL; 
	} 
	else 
	{ 
		temp->node_pointer = head_pointer; 
		head_pointer = temp; 
		head_pointer->data = num; 
	} 
	return head_pointer; 
} 
//스택에서 자료를 지운다 
node * DELETE(node * head_pointer) 
{ 
	node * temp = new node; 
	//스택에 자료가 없을 때 
	if(head_pointer == NULL) 
		cout << "no data in stack" << "\n"; 
	else 
	{ 
		cout << "delete num : " << head_pointer->data << "\n"; 
		temp = head_pointer; 
		head_pointer = head_pointer->node_pointer; 
		delete temp; 
	} 
	return head_pointer; 
}