2019-10-31 Idexer, LinkedList(직접만든) 사용한 인벤토리
Console Programming/C# Console 2019. 10. 31. 16:40Program.cs
namespace Syntax01
{
class Program
{
static void Main(string[] args)
{
new App();
}
}
}
App.cs
using System;
namespace Syntax01
{
public class App
{
public App()
{
Syntax01.LinkedList list = new LinkedList(10);
list.Add(new Item(100, "장검"));
list.Add(new Item(200, "단검"));
list.Add(new Item(300, "활"));
list.Add(new Item(400, "도끼"));
list.Print();
Console.WriteLine("단검을 제거함");
list.Remove("단검");
list.Print();
Console.WriteLine("지팡이를 추가함");
list.Add(new Item(500, "지팡이"));
list.Print();
Console.WriteLine("Node의 흐름순으로 출력하면");
list.PrintByNode();
Console.WriteLine("장검을 제거함");
list.Remove("장검");
list.Print();
}
}
}
LinkedList.cs
using System;
namespace Syntax01
{
public class LinkedList
{
public Node first;
public Node[] nodes;
public Node this[int i]
{
get
{
return nodes[i];
}
}
public LinkedList(int capacity)
{
this.nodes = new Node[capacity];
}
public void Add(Item item)
{
Node node = new Node(item);
if(first==null)
{
first = node;
}
else
{
Node lastNode = FindLast(first);
lastNode.next = node;
node.previous = lastNode;
}
for(int i=0; i < nodes.Length; i++)
{
if(nodes[i]==null)
{
nodes[i] = node;
return;
}
}
int lastindex = nodes.Length;
Array.Resize(ref nodes, nodes.Length * 2);
nodes[lastindex] = node;
}
public Node FindLast(Node node)
{
if(node.next ==null)
{
return node;
}
return FindLast(node.next);
}
public void Remove(string name)
{
int i = GetIndex(name);
Node foundNode = nodes[i];
if(nodes[i]==first)
{
first = nodes[i].next;
nodes[i] = null;
return;
}
if (foundNode != null)
{
foundNode.previous.next = foundNode.next;
foundNode.next.previous = foundNode.previous;
nodes[i]=null;
}
}
public int GetIndex(string name)
{
for(int i=0; i<nodes.Length; i++)
{
if(nodes[i]!=null && nodes[i].item.Name==name)
{
return i;
}
}
return -1;
}
//public Node GetT(string name)
//{
// Node node = first;
// while(node!=null)
// {
// if (node.item.Name == name)
// {
// return node;
// }
// else
// {
// node = node.next;
// }
// }
// return null;
//}
public void Print()
{
Console.WriteLine("---------------Index순으로-------------------");
for (int i=0; i < nodes.Length; i++)
{
if(nodes[i]!=null)
{
Console.WriteLine(nodes[i].item.Name);
}
}
Console.WriteLine("------------------------------------------");
Console.WriteLine();
}
public void PrintByNode()
{
Console.WriteLine("----------------Node순으로-------------------");
Node nodePrint = first;
while(nodePrint!=null)
{
Console.WriteLine(nodePrint.item.Name);
nodePrint = nodePrint.next;
}
Console.WriteLine("------------------------------------------");
Console.WriteLine();
}
}
}
Item.cs
namespace Syntax01
{
public class Item
{
public int Id { get; set; }
public string Name { get; private set; }
public Item(int id, string name)
{
this.Id = id;
this.Name = name;
}
}
}
Node.cs
namespace Syntax01
{
public class Node
{
public Item item;
public Node next;
public Node previous;
public Node(Item item)
{
this.item = item;
}
}
}
'Console Programming > C# Console' 카테고리의 다른 글
백준 10809 알파벳 찾기 (0) | 2019.11.05 |
---|---|
백준 10828 스택 (0) | 2019.11.04 |
2019-10-31 System.NullReferenceException 인벤토리를 Indexer와 Linked List를 사용하여 구현 (0) | 2019.10.31 |
2019-10-31 return을 제때 사용하지 않았을 때 Indexer사용해서 인벤토리 만들기 (0) | 2019.10.31 |
백준 2748 피보나치수2 (0) | 2019.10.31 |