1顺序栈:
类型定义:
typedef struct{
int data[maxlength];
int top;
}STACK;
初始化栈:STACK S;
栈的存储容量:maxlength-1;
栈空:S.top=-1;
栈满:S.top=maxlength-1;
站定元素:S.data[S.top]
出栈操作:
void Pop(STACK &S){
if(Empty(S)){
printf("栈空");
}else{
S.top=S.top-1;
}
}
入栈操作:
void Push(int x,STACK &S){
if(S.top==5){
printf("栈满");
}else{
S.top=S.top+1;
S.data[S.top]=x;
}
}
2.链栈
typedef struct StackNode{
int data;
struct StackNode *next;
}StackNode,*LinkStack;
初始化:
void InitStack(LinkStack &S){
S=(LinkStack)malloc(sizeof(StackNode));
S->next=NULL;
}
入栈:
status Push(LinkStack &S,ElemType e){
p=(LinkStack)malloc(sizeof(LinkNode));
p->data=e;
p->next=S;
S->next=p;
return OK;
}
出栈:
Status Pop(LinkStack &S,ElemType &e){
if(S->next==NULL){
return ERROR;
}
p=S->next;
e=p->next;
S->next=p->next;
free(p);
return OK;
}
3:共享栈
//共享栈的定义
#define MaxSize 100 //共享栈中最多存储元素个数
typedef int ElemType;
typedef struct Stack{
int data[MaxSize];//栈空间
int top[2];//top为两个栈指针指针,
}Stack;
栈空条件:
S.top[0]=-1&&S.top[1]==N;//S.top[0]==-1为左栈空,S.top[1]==N;为右栈空。
栈满条件:
S.top[1]-S.top[0]==1
入栈语句:
int Push(Stack S,int i,int x){
//i为栈号,i=0表示左栈S1,i=1,表示右栈S2,x表示插入的元素。
if(i<0||i>.1) printf("输入的栈号错误“); exit(0);
if(S.top[1]-S.top[0]==1) printf("栈已满\n");return 0;
switch(i){
case 0: S.data[++S.top[0]]=x;return 1;break;
case 1: S.data[--S.top[1]]=x; return 1;
}
}
出栈语句
int Pop(Stack S,int i){
if(i<0||i>1) printf("输入的栈号不对\n”);exit(0);
switch(i){
case 0: if(S.top[0]==-1) printf("栈空“);return -1;
else{return S.data[S.top[0]--];break;
case 1: if(S.top[1]==N) printf("栈空”); return -1;
else{return S.data[S.top[1]++];
]
}