C#/자료구조

0330_단일 연결리스트로 stack 구현하기

minquu 2021. 3. 30. 15:03
반응형


연결리스트로 구현한 stack
연결리스트는 그 구조가 일렬로 데이타를 연결하고 있다는 점에서 STack구현에 쉽게 이용
다만, 마지막 노드 뒤에 새 노드를 추가하는게 아니라
스택의 top 포인터에 새 노드를 추가하면서 새 노드의 넥스트 포인터가 이전 노드를 가리키도록 해야한다. //핵심 추가에

STack에서 데이타를 꺼내오는 동작은 top 포인터의 데이타를 리턴// 데이터 가져오는부분

하면서 top 포인터를 top의 아래 노드로 설정하면 된다. // 데이터를 설정하는 부분

top 포인트는 참조// 

// 잘 안되면 그림을 그려보라
// top 이 없어 -> top 만들기
// 노드 추가 -> 노드의 넥스트를 탑으로
// top을 새로운 노드로 바꿔준다.
// pop => top에 데이터를 빼고, top next를 top로 만들어줌

 

------

 

 

초기화 셋팅, top를 만들어준다.

 

일단 새 노드의 포인터가 이전 노드를 가르키게한다. 그리고 top를 새로 만드어진 노드로 지정

 

-----

 

top 데이터를 꺼낸다. 탑 포인터(아래있는 노드)에게 탑을 지정

 

예외 적용

---------

 

 

top 데이터를 리턴해준다.

 

예외적용

 

======

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace study17
{

    public class StackLinkedList
    {
        //top 가 필요함
        private Node top;
        public StackLinkedList()
        {
        }
        public void Push(string data)
        {
            if (this.top == null) {
                this.top = new Node(data); // 만약에 top 이 없다면 탑을 새로운 노드로 만들어준다.
            }
            var node = new Node(data);
            node.next = this.top;  // 추가할때는, 새 노드의 포인터가 이전 노드를 가르키면 된다.
            this.top = node; // top을 새로 만들어진 노드로  지정해줘야한다.
        }
        public string Pop()
        {
            if (this.top == null) {
                throw new ApplicationException("Stack is empty");
            }
            var result = this.top.data; //먼저 top에 있는 데이터를 꺼낸다.
            this.top = this.top.next; // 그리고 탑을 탑포인터(아래있는 노드)에게 탑을 지정한다.
            return result;
        }

        public string Peek()
        {
            if (this.top == null)
            {
                throw new ApplicationException("Stack is empty");
            }
            return this.top.data;

        }
                    
    }
}

 

 

=========

반응형