C# 링크드리스트

C# 라이브러리에는 링크드리스트, 큐, 스택등 다양한 자료구조가 존재하지만 실제로 구현해보고 내부 동작과정을 이해하는 것이 중요하기 때문에 실제로 구현해본다.

using System;

namespace C_
{
    class Node{ //node 정의
        public int key;
        public Node next;
        public Node(int _key){
            key = _key;
            next = null;
        }
    }
    class LinkedList{
        private Node head;

        public void addHead(int key){
            Node newnode = new Node(key);
            newnode.next = head;
            head = newnode;
        }

        public int getHead(){
            if(head == null)
                return -1;
            return head.key;
        }

        public void deleteHaed(){
            head = head.next;
        }

        public void addTail(int key){
            Node newnode = new Node(key);
            if(head == null){
                head = newnode;
                return;
            }
            Node ptr;
            ptr = head;
            while(ptr.next != null){
                ptr = ptr.next;
            }
            ptr.next = newnode;
        }

        public int getTail(){
            Node ptr;
            ptr = head;
            while(ptr.next != null){
                ptr = ptr.next;
            }
            return ptr.key;
        }

        public void deleteTail(){
            Node ptr, prev;
            ptr = head;
            prev = ptr;
            while(ptr.next != null){
                prev = ptr;
                ptr = ptr.next;
            }
            prev.next = null;
        }

        public void DeleteNode(int key){
            Node ptr = head;
            Node prev = null;
            if(ptr == null && ptr.key == key){
                head = ptr.next;
                return;
            }
            while(ptr == null){
                prev = ptr;
                ptr = ptr.next;
            }
            prev.next = ptr.next;
        }

        public void listPrint(){
            for (Node ptr = head; ptr != null; ptr = ptr.next){
                Console.Write(ptr.key + " ");
            }
            Console.WriteLine();
        }
    }

    class Stack{
        private LinkedList list = new LinkedList();
        
        public void push(int key){
            list.addHead(key);
        }

        public int pop(){
            int temp = list.getHead();
            list.deleteHaed();
            return temp;
        }

        public void Sprint(){
            list.listPrint();
        }
    }
    
    class Queue{
        private LinkedList list = new LinkedList();

        public void enQueue(int key){
            list.addHead(key);
        }

        public int deQueue(){
            int temp = list.getTail();
            list.deleteTail();
            return temp;
        }

        public void Qprint(){
            list.listPrint();
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            LinkedList list = new LinkedList();
            list.addHead(4);
            list.addTail(5);
            list.addTail(1);
            list.addTail(2);
            list.addTail(500);
            list.addHead(866);
            list.listPrint();

            Queue queue = new Queue();
            queue.enQueue(4);
            queue.enQueue(1);
            queue.enQueue(2);
            queue.enQueue(3);
            Console.WriteLine(queue.deQueue());
            Console.WriteLine(queue.deQueue());
            queue.Qprint();

            Stack stack = new Stack();
            stack.push(4);
            stack.push(3);
            stack.push(2);
            stack.push(1);
            Console.WriteLine(stack.pop());
            Console.WriteLine(stack.pop());
            stack.Sprint();
        }
    }
}

조금 더 다양한 기능,, 생성자, 오버라이딩, 프로퍼티등 다양하게 사용하고 싶었지만..

너무 오랜만에 c#을 사용해보니 다른 언어들과 너무 헷갈린다.

가장 표준이 되는 모델을 생각해서 구현했으며 링크드리스트를 기초모델로 삼았다.

댓글남기기