ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 리스트 스택(Stack)
    @ 16. 1 ~ 17. 1/자료구조 2013. 4. 7. 21:25

    리스트를 이용한 스택 구현

    항상 TopStack을 가르키는 포인터를 지정함으로써 스택처럼 구현..

    Push, Pop, Show 만 구현한 까닭에 일부 메모리 누수있음..?!

    StackNode.cpp

     

    #include"StackNode.h"
    
    int StackNode::GetData()
    {
    	return data;
    }
    void StackNode::InputData(int num)
    {
    	data=num;
    }
    
    

    StackNode.h

     

    #ifndef __STACKNODE_H__
    #define __STACKNODE_H__
    #include<iostream>
    using namespace std;
    
    class StackNode
    {
    private:
    	int data;
    public:
    	StackNode* plink;
    public:
    	StackNode()
    	{
    		data=0;
    	}
    	int GetData();
    	void InputData(int num);
    };
    
    #endif
    
    

    StackList.cpp

     

    #include<iostream>
    #include"StackList.h"
    
    StackList::StackList()	
    {
    	CurrentCount=0;
    	TopNode=new StackNode;
    	TopNode->plink=NULL;
    }
    StackList::~StackList()
    {
    	delete TopNode;
    }
    void StackList::PushStack(StackNode node)
    {
    	StackNode* NewNode=new StackNode;
    	*NewNode=node;
    	NewNode->plink=TopNode;
    	TopNode=NewNode;
    	CurrentCount++;
    }
    void StackList::PopStack()
    {
    	cout << "Pop 실행" << endl;
    	StackNode* temp;
    	temp=TopNode;
    	TopNode=temp->plink;
    	temp->plink=NULL;
    	delete temp;
    	temp=NULL;
    	CurrentCount--;
    	if(temp==NULL)
    	{
    		cout << "팝 메모리 삭제" << endl;
    	}
    	else
    		cout << "팝 메모리 오류" << endl;
    }
    
    void StackList::PeekStack()
    {
    }
    void StackList::ShowAllStack()
    {
    	StackNode* ShowNode;
    	ShowNode=TopNode;
    	for(int i=CurrentCount-1;i>=0;i--)
    	{
    		cout << i << "번째" << ShowNode->GetData() << endl;
    		ShowNode=ShowNode->plink;
    	}
    	cout << "모든 데이터 출력완료" << endl;
    }
    
    

    StackList.h

     

    #ifndef __STACKLIST_H__
    #define __STACKLIST_H__
    
    #include<iostream>
    #include"StackNode.h"
    
    using namespace std;
    
    class StackList
    {
    public:
    	int CurrentCount;
    	StackNode* TopNode;
    public:
    	StackList();
    	~StackList();
    	void PushStack(StackNode node);
    	void PopStack();
    	void PeekStack();
    	void ShowAllStack();
    };
    #endif
    
    

    main.cpp

     

    #include<iostream>
    #include<conio.h>
    #include"StackList.h"
    #include"StackNode.h"
    
    using namespace std;
    
    int main()
    {
    	StackList list;
    	StackNode a, b, c;
    	a.InputData(1);
    	b.InputData(2);
    	c.InputData(3);
    	cout << "Push 실행" << endl;
    	list.PushStack(a);
    	list.PushStack(b);
    	list.PushStack(c);
    	cout << "a(1), b(2), c(3) 순으로 Push 실시, c(3)이 가장 Top에 위치"<<endl;
    	cout << endl;
    	list.ShowAllStack();
    
    	list.PopStack();
    	cout << endl;
    	list.ShowAllStack();
    
    	getch();
    	return 0;
    }
    
    

     

     

    아직도 책이 두껍다..

    '@ 16. 1 ~ 17. 1 > 자료구조' 카테고리의 다른 글

    배열 선형 큐  (0) 2013.04.15
    리스트 스택을 이용한 미로찾기(구상)  (0) 2013.04.08
    스택(Stack)  (0) 2013.04.05
    이중 링크드 리스트 구현  (0) 2013.03.31
    아....링크드 리스트(단일)  (0) 2013.02.05
Designed by Tistory.