[자료구조] 연결리스트 기반 스택의 구현

최대 1 분 소요

[자료구조] 연결리스트 기반 스택의 구현

  • 연결리스트로 스택을 구현하였다.
  • 포인터변수는 노드를 가리킬 수 있는 head 하나만 선언한다.
  • 연결리스트와 똑같은데, 삽입의 역순으로 노드를 참조할 수 있게 구현하면 된다.
#include <iostream>
#include <cstdlib>
using namespace std;

typedef struct _node {
	int data;
	struct _node *next;
}Node;

typedef struct{
	Node *head;
}stack;

void  StackInit(stack * pstack) {
	pstack->head = NULL;
}

int SIsEmpty(stack *pstack) {
	if (pstack->head == NULL) return 1;
	else return 0;
}

void SPush(stack *pstack, int data) {
	Node * newNode = (Node*)malloc(sizeof(Node));
	newNode->data = data;
	newNode->next = pstack->head;
	pstack->head = newNode;
}

int SPop(stack *pstack) {
	int rdata;
	Node * rnode;
	if (SIsEmpty(pstack)) {
		cout << "Stack Memory Error!" << endl;
		exit(-1);
	}
	rdata = pstack->head->data;
	rnode = pstack->head;
	pstack->head = pstack->head->next;
	free(rnode);
	return rdata;
}

int SPeek(stack *pstack) {
	if (SIsEmpty(pstack)) {
		cout << "Stack Memory Error" << endl;
		exit(-1);
	}
	return pstack->head->data;
}
int main() {
	stack list;
	StackInit(&list);
	SPush(&list, 1);
	SPush(&list, 2);
	SPush(&list, 3);
	SPush(&list, 4);
	SPush(&list, 5);
	while (!SIsEmpty(&list)) cout << SPop(&list) << endl;
	return 0;
}

출처 : 윤성우의 열혈 자료구조 (윤성우 지음, 오렌지미디어)

댓글남기기