ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • LinkedList 클래스를 활용한 프로그램
    C# 예제 공부일기 2020. 7. 13. 20:44

    앞에서 만든 LinkedList 클래스를 이용하여 삽입, 삭제, 출력하는 프로그램

     

    using System;
    using System.ComponentModel;
    
    namespace CPractice
    {
        class Node
        {
            internal int data;
            internal Node next;
            public Node(int data)
            {
                this.data = data;
                next = null;
            }
        }
        class LinkedList
        {
            Node head;
    
            internal void InsertFront(int data)
            {
                Node node = new Node(data);
                node.next = head;
                head = node;
            }
            internal void InsertLast(int data)
            {
                Node node = new Node(data);
                if(head ==null)
                {
                    head = node;
                    return;
                }
                Node lastNode = GetLastNode();
                lastNode.next = node;
            }
            internal Node GetLastNode()
            {
                Node temp = head;
                while (temp.next !=null)
                {
                    temp = temp.next;
                }
                return temp;
            }
    
            internal void InsertAfter(int prev, int data)
            {
                Node prevNode = null;
    
                for (Node temp = head; temp != null; temp = temp.next)
                    if (temp.data == prev)
                        prevNode = temp;
                if(prevNode == null)
                {
                    Console.WriteLine("{0} data is not in the list");
                    return;
                }
                Node node = new Node(data);
                node.next = prevNode.next;
                prevNode.next = node;
            }
            internal void DeleteNode(int key)
            {
                Node temp = head;
                Node prev = null;
                if(temp != null&&temp.data==key)
                {
                    head = temp.next;
                    return;
                }
                while(temp != null && temp.data !=key)
                {
                    prev = temp;
                    temp = temp.next;
                }
                if(temp ==null)
                {
                    return;
                }
                prev.next = temp.next;
            }
            internal void Reverse()
            {
                Node Prev = null;
                Node current = head;
                Node temp = null;
                while(current !=null)
                {
                    temp = current.next;
                    current.next = Prev;
                    Prev = current;
                    current = temp;
                }
                head = Prev;
            }
            internal void Print()
            {
                for (Node node = head; node != null; node = node.next)
                    Console.Write(node.data + " -> ");
                Console.WriteLine();
            }
    
        }
    
        
        class Program
        {
            static void Main(string[] args)
            {
                LinkedList list = new LinkedList();
                Random r = new Random();
    
                for (int i = 0; i < 5; i++)
                    list.InsertLast(r.Next(100)); //0부터 100까지 임의의 수
                                                  //를 노드의 마지막에 추가
    
    
                Console.WriteLine("랜덤한 5개의 값의 리스트입니다.");
                list.Print();
    
                Console.WriteLine("\n 맨 앞에 10 맨 뒤에 90 삽입. <ENTER>를 입력하세요.");
                Console.ReadLine();
                list.InsertFront(10);
                list.InsertLast(90);
                list.Print();
    
                Console.WriteLine("\nx 노드 뒤에 y값을 저장하려고 합니다. ");
                Console.Write(" x 값을 입력하세요 : ");
                int x = int.Parse(Console.ReadLine());
                Console.Write(" y 값을 입력하세요 : ");
                int y = int.Parse(Console.ReadLine());
    
                list.InsertAfter(x, y);
                list.Print();
    
                Console.WriteLine("\n 삭제할 노드의 값을 입력하세요 :");
                int z = int.Parse(Console.ReadLine());
                list.DeleteNode(z);
                list.Print();
    
                Console.WriteLine("\n 리스트를 뒤집어서 출력");
                list.Reverse();
                list.Print();
    
    
            }
           
    
        }
    }
    

     

     

    'C# 예제 공부일기' 카테고리의 다른 글

    스택을 이용한 프로그램  (0) 2020.07.14
    Stack<T>의 구현  (0) 2020.07.14
    LinkedList의 구현  (0) 2020.07.13
    dynamic 형을 사용하는 일반화 프로그램  (0) 2020.07.13
    일반화 클래스(제네릭 클래스)  (0) 2020.07.13
Designed by Tistory.