C#/수업 내용

[C#] Stack을 Linked List로 구현하기

JSH1 2021. 9. 17. 11:43

        public App()
        {
            Stack stack = new Stack();

            bool empty = stack.IsEmpty();
            Console.WriteLine("empty: {0}", empty);

            stack.Push(3);
        }
    class Stack
    {
        // nested class 중첩 클래스
        private class Node
        {
            public int Data 
            { 
                get; 
                private set; 
            }
            public Node Next { get; set; }

            public Node(int data)
            {
                this.Data = data;
            }
        }

        private Node top;

        public Stack()
        {
            Console.WriteLine("스택이 생성되었습니다.");
        }

        public void Push(int value)
        {
            if (top == null)
            {
                top = new Node(value);
            }
        }

        public bool IsEmpty()
        {
            if (this.top == null)
            {
                return true;
            }

            else
            {
                return false;
            }
        }
    }


            stack.Push(3);
            stack.Push(5);
        public void Push(int value)
        {
            if (top == null)
            {
                top = new Node(value);
                Console.WriteLine("stack에 {0}이 추가 되었습니다.", value);
            }

            else
            {
                top.Next = new Node(value);
                Console.WriteLine("stack에 {0}이 새로 추가 되었습니다.", value);
            }
        }


            stack.Print();
        public void Print()
        {
            if (top == null)
            {
                return;
            }

            else
            {
                Console.WriteLine("현재 Node의 data: {0}", top.Data);
            }

            if (top.Next != null)
            {
                Print(top.Next);
            }
        }

        private void Print(Node next)
        {
            Console.WriteLine("현재 Node의 data: {0}", next.Data);

            if (next.Next != null)
            {
                Print(next.Next);
            }
        }


        // Push 메서드 변경
        
        public void Push(int value)
        {
            if (top == null)
            {
                top = new Node(value);
                Console.WriteLine("stack에 {0}이 추가 되었습니다.", value);
            }

            else
            {
                Node temp = top;
                top = new Node(value);
                top.Next = temp;
                Console.WriteLine("stack에 {0}이 새로 추가 되었습니다.", value);
            }
        }
            stack.Push(3);
            stack.Push(5);
            stack.Push(7);
            stack.Push(9);
            
            stack.Pop();
            stack.Pop();
            stack.Pop();
            stack.Pop();
            stack.Pop();
        public int Pop()
        {
            int value = top.Data;
            Console.WriteLine("Pop: {0} 제거", value);

            Node temp = top.Next;
            top = null;
            top = temp;

            return value;
        }


        private int count; // Push메서드 실행할때 ++, Pop메서드 실행할때 --
        
        public int Count()
        {
            return count;
        }


            Console.WriteLine("stack Peek: {0}", stack.Peek());
        public int Peek()
        {
            if (top == null) throw new InvalidOperationException();
            return top.Data;
        }


 

'C# > 수업 내용' 카테고리의 다른 글

[C#] Stack 복습  (0) 2021.09.23
[C#] 2021-09-17 역폴란드 표기법  (0) 2021.09.18
[C#] 재귀함수  (0) 2021.09.16
[C#] Linked List (연결리스트), Flowchart (순서도)  (0) 2021.09.15
[C#] 동적 배열  (0) 2021.09.14