栈
一、顺序栈
#include<iostream>using namespace std;#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXSIZE 100typedef int Status;
typedef int ElemType;typedef struct{ElemType data[MAXSIZE];int top;
}SqStack;
Status init(SqStack *s){s->top=0;return OK;
}
Status push(SqStack *s,ElemType e){if(s->top==MAXSIZE) return ERROR;s->data[s->top]=e;s->top++;return OK;
}
Status pop(SqStack *s,ElemType *e){if(s->top==0){return ERROR;}s->top--;*e=s->data[s->top];return OK;
}
ElemType GetElem(SqStack s){return s.data[s.top-1];
}
二、链栈
#include<iostream>
#include<stdio.h>
using namespace std;#define OK 1
#define ERROR 0
#define OVERFLOW -2typedef int Status;
typedef int ElemType;typedef struct StackNode{ElemType data;struct StackNode *next;
}StackNode,*LinkStack;
Status init(LinkStack &linkstack){linkstack = new StackNode;linkstack->next=NULL;return OK;
}
Status push(LinkStack &l,ElemType e){StackNode *p=new StackNode;p->data=e;p->next=l;l=p;return OK;
}
Status pop(LinkStack &l,ElemType &e){if(l->next==NULL){return ERROR;}e=l->data;StackNode *p;p=l;l=p->next;delete p;return OK;
}
ElemType GetElem(LinkStack l){if(l->next!=NULL){return l->data;}return ERROR;
}