#pragma once
#ifndef _LINKSTACK_
#define _LINKSTACK_
#include<iostream>
using namespace std;
typedef int DataType;
struct node {
DataType info;
struct node *link;
};
typedef struct node stackNode;
typedef struct node *PNode;
typedef struct LinkStack {
PNode top;
}LinkStackNode, *PLinkStack;
PLinkStack createEmptyStack_link() {
PLinkStack plstack = new LinkStackNode;
if (plstack != NULL) plstack->top = NULL;
else cout << "Out of space!" << endl;
return plstack;
}
int isEmptyStack_link(PLinkStack plstack) {
return (plstack->top == NULL);
}
void push_link(PLinkStack plstack, DataType x) {
PNode p = new stackNode;
if (p != NULL) {
p->info = x;
p->link = plstack->top;
plstack->top = p;
}
else {
cout << "Out of space!" <<endl;
}
}
void pop_link(PLinkStack plstack) {
PNode p;
if (isEmptyStack_link(plstack))cout << "Empty Stack" << endl;
else {
p = plstack->top;
plstack->top = plstack->top->link;
free(p);
}
}
DataType top_link(PLinkStack plstack) {
if (isEmptyStack_link(plstack))cout << "Stack is empty!" << endl;
else {
return (plstack->top->info);
}
}
#endif