顺序栈:
#include<stdio.h>
#include<stdlib.h>
using namespace std;
#define Maxsize 100
typedef int DataType;
struct SeqStack{
//int MAXNUM;
int t;
DataType *s;
};
typedef struct SeqStack *PSeqStack;
PSeqStack createEmptyStack_seq(int m)
{
PSeqStack pastack = (PSeqStack)malloc(sizeof(struct SeqStack));
if(pastack!=NULL)
{
pastack->s = (DataType *)malloc(sizeof(DataType)*m);
if(pastack->t ){
//pastack->MAXNUM = m;
pastack->t = -1;
return pastack;
}
else free(pastack);
}
printf("Out of space!!\n");
return NULL;
}
int isEmptyStack_seq(PSeqStack pastack){
return(pastack->t == -1);
}
void push_seq(PSeqStack pastack,DataType x)
{
if(pastack->t>=Maxsize -1)
printf("Overflow!\n");
else
{
pastack->t = pastack->t+1;
pastack->s[pastack->t ] = x;
}
}
void pop_seq(PSeqStack pastack)
{
if(pastack->t == -1)
{
printf("Underflow!\n");
}
else
pastack->t = pastack->t-1;
}
DataType top_seq(PSeqStack pastack)
{
if(pastack->t == -1)
{
printf("It is empty!\n");
}
else
return (pastack->s[pastack->t]);
}
int main()
{
PSeqStack pastack = createEmptyStack_seq(5);
int flage = isEmptyStack_seq(pastack);
push_seq(pastack,1);
push_seq(pastack,3);
push_seq(pastack,5);
push_seq(pastack,9);
pop_seq(pastack);
printf("%d",top_seq(pastack));
return 0;
}
链栈:
#include<stdio.h>
#include<stdlib.h>
struct Node;
typedef struct Node *PNode;
typedef int DataType;
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)
{
PNode p;
if(isEmptyStack_link(plstack))
printf("Empty stack pop.\n");
else
{
p = plstack->top;
plstack->top = plstack->top->link ;
free(p);
}
}
DataType top_link(PLinkStack plstack)
{
if(plstack->top == NULL)
{
printf("Stack is empty!\n");
}
else
return (plstack->top ->info);
}
int main()
{
PLinkStack plstack = createEmptyStack_link();
int flag = isEmptyStack_link(plstack);
push_link(plstack,3);
push_link(plstack,5);
push_link(plstack,6);
push_link(plstack,10);
pop_link(plstack);
printf("%d",top_link(plstack));
return 0;
}