顺序栈

顺序栈

  • 顺序栈的定义

    #define MaxSize 10//定义栈中元素的最大个数
    typedef struct{
    	ElemType data[MaxSize];//静态数组存放栈中元素
    	int top;//站顶指针
    }SqStack;
    
    void testStack(){
    	SqStack S;//声明一个顺序栈(分配空间)
    	//......
    }
    
  • 顺序表的初始化操作

    #define MaxSize 10//定义栈中元素的最大个数
    typedef struct{
    	ElemType data[MaxSize];//静态数组存放栈中元素
    	int top;//站顶指针
    }SqStack;
    
    //初始化栈
    void InitStack(SqStack &S){
    	S.top = -1;//初始化栈顶指针
    }
    
    //判断栈空
    bool StackEmpty(SqStack S){
        if(S.top == -1) //栈空
            return true;
        else			//不空
            return false;
    }
    
    void testStack(){
    	SqStack S;//声明一个顺序栈(分配空间)
    	//......
    }
    
  • 进栈操作

    #define MaxSize 10//定义栈中元素的最大个数
    typedef struct{
    	ElemType data[MaxSize];//静态数组存放栈中元素
    	int top;//站顶指针
    }SqStack;
    
    //新元素入栈
    bool Push(SqStack &S, ElemType x){
    	if(S.top == MaxSize-1)//栈满,报错
            return false;
        S.top = S.top + 1;//指针先加一
        S.data[S.data] = x;//新元素入栈
        return true;
    }
    //其中
    S.top = S.top + 1;//指针先加一
    S.data[S.data] = x;//新元素入栈
    //也可以替换为一句代码
    S.data[++S.top] = x;//top先加一,后进行赋值
    
    //注意,不能和一下搞混,下面是错误写法
    S.data[S.top++] = x;
    //这样写等价于
    S.data[S.top] = x;
    S.top = S.top + 1;//先进行赋值,后top在加一
    
  • 出栈操作

    #define MaxSize 10//定义栈中元素的最大个数
    typedef struct{
    	ElemType data[MaxSize];//静态数组存放栈中元素
    	int top;//站顶指针
    }SqStack;
    
    //出栈操作
    bool Pop(SqStack &S, ElemType &x){
        if(S.top == -1) //栈空,报错
            return false;
        x = S.data[S.top];
        S.top = S.top - 1;
        return true;
    }
    //同样,其中的两句
        x = S.data[S.top];
        S.top = S.top - 1;
    //可以写成
    x = S.data[S.top--];
    //写成x = S.data[--S.top];就错了
    
  • 读栈顶元素

    #define MaxSize 10//定义栈中元素的最大个数
    typedef struct{
    	ElemType data[MaxSize];//静态数组存放栈中元素
    	int top;//栈顶指针:指向此时的栈顶元素
    }SqStack;
    
    //读栈顶元素
    bool Pop(SqStack S, ElemType &x){
        if(S.top == -1) //栈空,报错
            return false;
        x = S.data[S.top];
        return true;
    }
    
  • 共享栈

    #define MaxSize 10
    typedef struct{
    	ElemType data[MaxSize];
    	int top0;
    	int top1;
    }ShStack;
    
    //初始化栈
    void InitStack(ShStack &S){
    	S.top0 = -1;
    	S.top1 = MaxSize;
    }
    
    //栈满条件
    top0 + 1 == top1
    //top1 - 1 = top0
    
posted @ 2021-07-28 17:42  shiff  阅读(84)  评论(0编辑  收藏  举报