3.1.2栈的存储表示和实现

栈的顺序存储结构称为顺序栈。由于栈是受运算限制的线性表,因此线性表的存储结构对栈也适用。顺序栈也是用数组实现的。因为栈底的位置是不变的,故可以将栈底位置设置在数组的最低端(即下标为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];
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值