首页 > 代码库 > 数据结构(三)——栈Stack

数据结构(三)——栈Stack

栈是一种特殊的线性表,插入和删除操作均在栈顶进行,插入操作称为入栈,删除操作称为出栈。

一、顺序栈

利用顺序存储方式实现的栈称为顺序栈,下面是它的一些基本操作实现算法,需要理解和记忆。

1.顺序栈的类型定义

#define StackSpaceIncr 20
typedef struct{
    SElemType *base;
    int top;
    int stackSize;
}SqStack;//顺序栈类型 

2.初始化操作InitSqStack(&S,InitSize)

Status InitSqStack( SqStack &S,int InitSize)
{
    S.base=(SElemType *)malloc(InitSize * sizeof(SElemType));
    if(!S.base) return OVERFLOW;//若失败
    S.stackSize=InitSize;
    S.top=0;//置为空栈
    return OK; 
} 

3.判空操作stackIsEmpty(S)

Status stackIsEmpty(SqStack S)
{
    if(!S.top) return TRUE;
    else return FALSE;
}

4.清空操作clearStack(&S)

void clearStack(SqStack &S)
{
    S.top=0;
}

5.求栈长操作stackLength(S)

int stackLength(SqStack S)
{
    return S.top;
}

6.入栈操作Push(&S,e)

7.出栈操作Pop(&S,&e)

8.取栈顶操作getTop(S,&e)

二、链式栈

利用链式存储结构实现的栈称为链式栈,利用单链表实现链式栈时,其初始化、判空、清空、求长度操作都与单链表相同。

1.初始化操作InitLinkStack(&S)

2.入栈操作Push(&S,e)

3.出栈操作Pop(&S,&e)

4.取栈顶操作getTop(S,&e)

三、栈的实例——简单的括号匹配检验

数据结构(三)——栈Stack