본문 바로가기

- Programming/- 자료구조

★ 10. 연결 리스트를 이용한 스택 구현하기

반응형

연결 리스트를 이용한 스택 구현


전과 마찬가지로 각 기능별 함수로 구현되었습니다.



// # 연결 리스트를 이용한 스택 #

#include <iostream>
#include <stdlib.h>


using namespace std;

typedef int element;


struct stackNode
{
 element data;
 // # 다음 노드를 가리키는 포인터 변수 #
 stackNode *link;
};


stackNode* top;


// # 스택이 비어 있으면 true 아니면 false를 반환 #
int isEmpty()
{
 // # top 포인터가 NULL이면 스택이 비어 있는 것 #
 return (top == NULL);
}


// # 스택의 TOP에 원소를 삽입 #
void push(element item)
{
 // # 새로운 노드 공간을 확보 #
 stackNode* temp = new stackNode;

 // # 함수로 전달된 값을 복사 #
 temp->data = item;

 // # 새로운 노드가 현재 상태의 첫 노드를 가리킴 #
 temp->link = top;

 // # top이 새로운 노드를 가리키게 한다. #
 top = temp;
}


// # 스택의 TOP에서 원소를 삭제 #
element pop()
{
 element item;
 stackNode* temp = top;

 // # 스택이 비어있으면 #
 if (top == NULL)
 {
  cout << endl << endl << "스택 비어 있음 !" << endl;
  return 0;
 }
 else
 {
  // # 이전 TOP 데이터를 백업 #
  item = temp->data;

  // # TOP이 다음 노드를 가리키게 함 #
  top = temp->link;

  // # 이전 TOP 노드의 공간을 반납한다 #
  delete(temp);

  // # 이전 TOP 데이터를 리턴한다 #
  return item;
 }
}


element peek()
{
 element item;
 if (top == NULL)
 {
  cout << endl << endl << "스택 비어 있음 !" << endl;
  return 0;
 }
 else
 {
  item = top->data;
  return item;
 }
}

void main()
{
 push('A');
 push('B');
 push('C');
 push('D');
 push('E');

 while (isEmpty() == false)
 {
  printf("%c\t", pop());
 }
 
 getchar();
}

반응형