반응형
연결리스트로 구현한 stack
연결리스트는 그 구조가 일렬로 데이타를 연결하고 있다는 점에서 STack구현에 쉽게 이용
다만, 마지막 노드 뒤에 새 노드를 추가하는게 아니라
스택의 top 포인터에 새 노드를 추가하면서 새 노드의 넥스트 포인터가 이전 노드를 가리키도록 해야한다. //핵심 추가에
STack에서 데이타를 꺼내오는 동작은 top 포인터의 데이타를 리턴// 데이터 가져오는부분
하면서 top 포인터를 top의 아래 노드로 설정하면 된다. // 데이터를 설정하는 부분
top 포인트는 참조//
// 잘 안되면 그림을 그려보라
// top 이 없어 -> top 만들기
// 노드 추가 -> 노드의 넥스트를 탑으로
// top을 새로운 노드로 바꿔준다.
// pop => top에 데이터를 빼고, top next를 top로 만들어줌
------
초기화 셋팅, top를 만들어준다.
일단 새 노드의 포인터가 이전 노드를 가르키게한다. 그리고 top를 새로 만드어진 노드로 지정
-----
top 데이터를 꺼낸다. 탑 포인터(아래있는 노드)에게 탑을 지정
예외 적용
---------
top 데이터를 리턴해준다.
예외적용
======
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace study17
{
public class StackLinkedList
{
//top 가 필요함
private Node top;
public StackLinkedList()
{
}
public void Push(string data)
{
if (this.top == null) {
this.top = new Node(data); // 만약에 top 이 없다면 탑을 새로운 노드로 만들어준다.
}
var node = new Node(data);
node.next = this.top; // 추가할때는, 새 노드의 포인터가 이전 노드를 가르키면 된다.
this.top = node; // top을 새로 만들어진 노드로 지정해줘야한다.
}
public string Pop()
{
if (this.top == null) {
throw new ApplicationException("Stack is empty");
}
var result = this.top.data; //먼저 top에 있는 데이터를 꺼낸다.
this.top = this.top.next; // 그리고 탑을 탑포인터(아래있는 노드)에게 탑을 지정한다.
return result;
}
public string Peek()
{
if (this.top == null)
{
throw new ApplicationException("Stack is empty");
}
return this.top.data;
}
}
}
=========
반응형
'C# > 자료구조' 카테고리의 다른 글
0330_ 왼쪽 자식 오른쪽 형제 표현법(LCRS)으로 Node생성 (0) | 2021.03.30 |
---|---|
0330_ 고정배열/동적배열을 사용한 Tree 구현 (0) | 2021.03.30 |
0330 _ 고정배열로 Stack 구현하기 (0) | 2021.03.30 |
0330_단일 연결 리스트로 큐 구현하기 (0) | 2021.03.30 |
0330_원형배열을 사용한 큐 구현 (0) | 2021.03.30 |