栈是一种特殊的线性表,插入和删除操作均在栈顶进行,插入操作称为入栈,删除操作称为出栈。
一、顺序栈
利用顺序存储方式实现的栈称为顺序栈,下面是它的一些基本操作实现算法,需要理解和记忆。
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)
三、栈的实例——简单的括号匹配检验
时间: 2024-10-10 22:43:20