栈是限制仅在表的一端进行插入和删除的线性表。
栈为后入先出的线性表,简称LIFO表。
采用顺序存储结构实现的栈简称为顺序栈。
顺序栈的类型定义与基本运算:
VC++6.0 C++实现:
struct SeqStack{ //类型定义
char data[StackSize];
int top;
};
void InitStack(struct SeqStack *S){ //将顺序栈置空
S->top=-1;
}
int StackEmpty(struct SeqStack *S){ //判断栈空
return S->top==-1;
}
int StackFull(struct SeqStack *S){ //判断栈满
return S->top==StackSize-1;
}
void Push(struct SeqStack *S,char x){ //进栈
if(StackFull(S))
cout<<"Stack overflow"<<endl; //上溢,退出运行
S->data[++S->top]=x;
}
char Pop(struct SeqStack *S){ //退栈
if(StackEmpty(S))
cout<<"Stack underflow"<<endl;
return S->data[--S->top];
}
char StackTop(struct SeqStack *S){ //取栈顶元素
if(StackEmpty(S))
cout<<"Stack is empty"<<endl; //空栈,退出运行
return S->data[S->top];
}
Elipse Java实现:
public class seqstack {
private final int StackSize=100; //顺序栈长度
private char[] data=new char[StackSize]; //顺序栈
private int top; //栈位置判断
public void InitStack(char[] S){ //将顺序栈置空
top=-1;
}
public boolean StackEmpty(char[] S){ //判断栈空
return top==-1;
}
public boolean StackFull(char[] S){ //判断栈满
return top==StackSize-1;
}
public void Push(char[] S,char x){ //进栈
if(StackFull(S))
System.out.println("Stack overflow"+"\n"); //上溢,退出运行
data[++top]=x;
}
public char Pop(char[] S){ //退栈
if(StackEmpty(S))
System.out.println("Stack underflow");
return data[top--];
}
public char StackTop(char[] S){ //取栈顶元素
if(StackEmpty(S))
System.out.println("Stack is empty"); //空栈,退出运行
return data[top];
}
public static void main(String[] args) { //主方法的一些相关测试
char[] z=new char[] {'a','b','c'};
int i; //循环变量
seqstack dx=new seqstack();
dx.InitStack(z); //栈置空
for(i=0;i<3;i++) {
dx.Push(z,z[i]);
}
System.out.println("栈中所有元素为:");
for(i=0;i<3;i++){
System.out.println(dx.data[i]); //查看栈中元素
}
System.out.println(dx.StackTop(z)); //取出栈顶元素
dx.InitStack(z); //栈置空
System.out.println(dx.StackTop(z)); //取出栈顶元素
}
}