美文网首页
顺序栈的表示和实现

顺序栈的表示和实现

作者: 搬砖的猫 | 来源:发表于2019-10-28 10:47 被阅读0次

顺序栈是指利用顺序存储结构实现的栈,即利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针top指示栈顶元素在顺序栈中的位置。

顺序栈的定义

//------顺序栈的存储结构------
#define MAXSIZE 100    //顺序栈存储空间的初始分配量 
typedef struct{
    SElemType *base;   //栈底指针 
    SElemType *top;    //栈顶指针 
    int stacksize;     //栈可用的最大容量 
}SqStack;

顺序栈的初始化

(1)为顺序栈动态分配一个最大容量为MAXSIZE的数组空间,使base指向这段空间的基地址,即栈底。
(2)栈顶指针top初始为base,表示栈为空。
(3)stacksize置为栈的最大容量MAXSIZE。

//顺序栈的初始化
Status InitStack(SqStack &S){
    //构造一个空栈 
    S.base = new SElemType[MAXSIZE];  //为顺序栈动态分配一个最大容量为MAXSIZE的数组空间 
    if(! S.base){
        exit(OVERFLOW);               //存储分配失败 
    }
    S.top = S.base;                   //top初始为base,空栈 
    S.stacksize = MAXSIZE;            //stacksize置为栈的最大容量MAXSIZE 
    return OK;
} 

顺序栈的入栈

(1)判断栈是否满,若满则返回ERROR。
(2)将新元素压入栈顶,栈顶指针加1。

//顺序栈的入栈
Status Push(SqStack &S, SElemType e){
    //插入元素e为新的栈顶元素 
    if(S.top - S.base == S.stacksize){  //栈满 
        return ERROR;
    }
    *S.top ++ = e;                      //元素e压入栈顶,栈顶指针加1 
    return OK;
} 

顺序栈的出栈

(1)判断栈是否空,若空则返回ERROR。
(2)栈顶指针减1,栈顶元素出栈。

//顺序栈的出栈
Status Pop(SqStack &S, SElemType e){
    //删除S的栈顶元素,用e返回其值 
    if(S.top == S.base){               //栈空 
        return ERROR;
    } 
    e == *--S.top;                     //栈顶指针减1,将栈顶元素赋给e 
    return OK;
} 

取顺序栈的栈顶元素

//取顺序栈的栈顶元素
SElemType GetTop(SqStack S){
    //返回S的栈顶元素,不修改栈顶指针 
    if(S.top != S.base){        //栈非空   
        return *(S.top - 1);    //返回栈顶元素的值,栈顶指针不变 
    }
} 

小结

由于顺序栈和顺序表一样,受到最大空间容量的限制,虽然可以在“满员”时重新分配空间扩大容量,但工作量较大,应该尽量避免。

相关文章

  • 顺序栈的表示和实现

    栈是一种重要的数据结构,从数据结构角度来看,栈也是线性表,其特殊性在于栈的基本操作是线性操作的子集,是操作受限的线...

  • 顺序栈的表示和实现

    顺序栈是指利用顺序存储结构实现的栈,即利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针top...

  • 数据结构基础--顺序栈

    顺序栈的概念:顺序栈是栈的顺序实现。顺序栈是指利用顺序存储结构实现的栈。采用地址连续的存储空间(数组)依次存储栈中...

  • 2018-07-09顺序表实现栈

    栈的实现 ——直接用顺序表(列表list)进行 栈结构实现 栈可以用顺序表实现,也可以用链表实现。 栈的操作 St...

  • 栈和队列算法设计题(二)

    题目 假设以I和O分别表示入栈和出栈操作。栈的初态和终态均为空,入栈和出栈的操作顺序可表示为仅由I和O组成的序列,...

  • C语言实现链栈以及基本操作

    链栈,即用链表实现栈存储结构。链栈的实现思路同顺序栈类似,顺序栈是将数顺序表(数组)的一端作为栈底,另一端为栈顶;...

  • 栈 Python实现

    栈的顺序表实现 栈的链接表实现

  • 作业帮做-栈结构验证

    顺序栈操作验证 实验目的 掌握栈的顺序存储结构; 验证栈的操作特性; 掌握顺序栈的基本操作实现方法。 实验内容 建...

  • 3. 栈的操作

    1. 栈的操作-c语言实现2. 栈操作的实现-顺序栈和链栈 3. 栈的实现与遍历4. c语言的函数调用栈5. 两个...

  • 数据结构与算法(五,栈和栈的应用,递归思想)

    栈 栈是只在尾部做添加和删除的线性表 栈的顺序结构方式 栈的顺序存储结构是使用数组实现的,Stack继承了Vect...

网友评论

      本文标题:顺序栈的表示和实现

      本文链接:https://www.haomeiwen.com/subject/mzbvvctx.html