C# 링크드리스트(스택, 큐)구현
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#을 사용해보니 다른 언어들과 너무 헷갈린다.
가장 표준이 되는 모델을 생각해서 구현했으며 링크드리스트를 기초모델로 삼았다.
댓글남기기