其他分享
首页 > 其他分享> > 顺序栈

顺序栈

作者:互联网

栈,是只能通过访问它的一端来实现数据存储和检索的一种线性数据结构。对于栈的修改要按照先进后出的原则进行,因此,栈又被称为后进先出(LIFO)的线性表。

顺序栈,是用一组地址连续的存储单元存储自栈顶到栈底的数据元素。

基本方法有:

  1. 初始化:创建一个空栈。
  2. 判断栈是否为空:如果栈为空,返回“真”,否则返回“假”。
  3. 入栈:将元素x加入栈顶,并更新栈顶指针。
  4. 出栈:将栈顶元素删除,并更新栈顶指针。可以返回栈顶元素。
  5. 读取栈顶元素:返回栈顶元素,但不修改栈顶指针。

C语言实现

#define TRUE 1
#define FALSE 0
#define ERROR -1
#define NULL -2
typedef int bool;
typedef int ElementType;

Stack CreateStack();
bool IsFull(Stack S);
bool IsEmpty(Stack S);
bool Push(Stack S, ElementType X);
ElementType Pop(Stack S);

typedef int Position;
struct SNode {
    ElementType *Data; /* 存储元素的数组 */
    Position Top;      /* 栈顶指针 */
    int MaxSize;       /* 堆栈最大容量 */
};
typedef struct SNode *Stack;

Stack CreateStack( int MaxSize )
{
    Stack S = (Stack)malloc(sizeof(struct SNode));
    S->Data = (ElementType *)malloc(MaxSize * sizeof(ElementType));
    S->Top = -1;
    S->MaxSize = MaxSize;
    return S;
}
 
bool IsFull( Stack S )
{
    return (S->Top == S->MaxSize-1);
}
 
int Push( Stack S, ElementType X )
{
    if ( IsFull(S) ) {
        printf("堆栈满");
        return FALSE;
    }
    else {
        S->Data[++(S->Top)] = X;
        return TRUE;
    }
}
 
bool IsEmpty( Stack S )
{
    return (S->Top == -1);
}
 
ElementType Pop( Stack S )
{
    if ( IsEmpty(S) ) {
        printf("堆栈空");
        return ERROR; /* ERROR是ElementType的特殊值,标志错误 */
    }
    else 
        return ( S->Data[(S->Top)--] );
}

应用

  1. 表达式求值
  2. 括号匹配
  3. 将递归过程转变为非递归过程

标签:顺序,return,int,Top,栈顶,ElementType,Stack
来源: https://www.cnblogs.com/vicky2021/p/16036650.html