栈的顺序存储结构称为顺序栈。由于栈是受运算限制的线性表,因此线性表的存储结构对栈也适用。顺序栈也是用数组实现的。因为栈底的位置是不变的,故可以将栈底位置设置在数组的最低端(即下标为0);栈顶则是通过进栈和退栈操作而变化的。下面我们用Java和c来描述顺序栈的数据结构。
Java语言描述顺序栈的基本运算实现
public class SeqStack {
int top = -1; //栈顶
int[] data = new int[20]; // 栈元素个数
//判断栈是否为空
boolean stackIsNull(SeqStack seqStack) {
if (seqStack.top == -1) {
return true;
}
return false;
}
/**
* 进栈操作,n进栈数据
*/
int pushStack(SeqStack s, int n) {
if (s.top == 19)
return 0;
s.top++;
s.data[s.top] = n;
return 1;
}
/**
* 退栈操作
* @param seqStack
* @return
*/
int popStack(SeqStack seqStack) {
int e;
if (stackIsNull(seqStack)) {
System.out.println("栈为空!");
System.exit(0);
}
e = seqStack.data[seqStack.top];
seqStack.top--;
return e;
}
//取栈顶元素
int getTop(SeqStack seqStack){
if (stackIsNull(seqStack)){
System.out.println("栈为空!");
System.exit(0);
}
return seqStack.data[seqStack.top];
}
public static void main(String[] args) {
SeqStack seqStack = new SeqStack();
seqStack.pushStack(seqStack,3); //入栈
System.out.println(seqStack.getTop(seqStack)); //取栈顶元素
System.out.println(seqStack.popStack(seqStack)); // 退栈
System.out.println(seqStack.stackIsNull(seqStack)); //判断栈是否为空
}
}
输出结果
3
3
true
c语言顺序栈实现
//顺序栈的定义
#define StackSize 100 //栈空间大小为100,
typedef char DataType; //DataType类型可根据实际情况而定,这里假设为char
typedef struct{
DataType data[StackSize];
int top;
}SeqStack;
SeqStack S;
//顺序栈的基本运算实现
//置空栈
void InitStack(SeqStack *S)
{ //空栈时栈顶指针为-1不能为0
S -> top = -1;
}
//判断栈空
int StackEmpty (SeqStack *S)
{
return S->top == -1;
}
//判断栈满
int StackFull(SeqStack *S)
{
return S->top==StackSize-1;
}
//进栈
void Push(SeqStack *S,DataType x)
{
if(StackFull(S)){
printf("栈满");
}else{
S->top=S->top+1;
S->data[S->top] = x;
}
}
//退栈
DataType Pop(SeqStack *S)
{
if(StackEmpty(S)){
printf("栈为空");
exit(0);
}else{
return S->data[S->top--];
}
}
//取栈顶元素
DataType GetTop(SeqStack *S)
{
if(StackEmpty(S)){
exit(0);
}else{
return S->data[S->top];
}
}