顺序表示
#include <stdlib.h>
#include <iostream>
using namespace std;
enum { MAXNUM = 20 };
typedef int DataType;
struct SeqStack {
int t;
DataType s[MAXNUM];
};
typedef struct SeqStack SeqSack, *PSeqStack;
PSeqStack createEmptyStack_seq(void) {
PSeqStack pastack = (PSeqStack)malloc(sizeof(struct SeqStack));
if (pastack == NULL)
printf("Out of space!! \n");
else
pastack->t = -1;
return pastack;
}
int isEmptyStack_seq(PSeqStack pastack) {
return pastack->t == -1;
}
void push_seq(PSeqStack pastack, DataType x) {
if (pastack->t >= MAXNUM - 1)
printf("Stack Overflow! \n");
else {
pastack->t++;
pastack->s[pastack->t] = x;
}
}
void pop_seq(PSeqStack pastack) {
if (pastack->t == -1)
printf("Underflow!\n");
else
pastack->t--;
}
DataType top_seq(PSeqStack pastack) {
return pastack->s[pastack->t];
}
int main()
{
PSeqStack st;
st = createEmptyStack_seq();
cout << isEmptyStack_seq(st) << endl;
push_seq(st, 1);
push_seq(st, 2);
push_seq(st, 3);
cout << top_seq(st) << endl;
pop_seq(st);
cout << top_seq(st) << endl;
cout << isEmptyStack_seq(st) << endl;
}
链接表示
#include <stdlib.h>
#include <iostream>
using namespace std;
typedef int DataType;
struct Node;
typedef struct Node *PNode;
struct Node {
DataType info;
PNode link;
};
struct LinkStack {
PNode top;
};
typedef struct LinkStack *PLinkStack;
PLinkStack createEmptyStack_link(void) {
PLinkStack plstack;
plstack = (PLinkStack)malloc(sizeof(struct LinkStack));
if (plstack != NULL)
plstack->top = NULL;
else
printf("Out of space! \n");
return plstack;
}
int isEmptyStack_link(PLinkStack plstack) {
return plstack->top == NULL;
}
void push_link(PLinkStack plstack, DataType x) {
PNode p;
p = (PNode)malloc(sizeof(struct Node));
if (p == NULL)
printf("Out of space!\n");
else {
p->info = x;
p->link = plstack->top;
plstack->top = p;
}
}
void pop_link(PLinkStack plstack) {
if (isEmptyStack_link(plstack))
printf("Empty stack pop.\n");
else {
PNode p = plstack->top;
plstack->top = plstack->top->link;
free(p);
}
}
DataType top_link(PLinkStack plstack) {
return plstack->top->info;
}
int main()
{
PLinkStack st;
st = createEmptyStack_link();
cout << isEmptyStack_link(st) << endl;
push_link(st, 1);
push_link(st, 2);
push_link(st, 3);
cout << top_link(st) << endl;
pop_link(st);
cout << top_link(st) << endl;
cout << isEmptyStack_link(st) << endl;
}