[ 2020年7月7号]
1.栈的基本概念
- 定义:栈式限定仅在表尾惊醒插入和删除操作的线性表。
- 特点:后进先出(Last In First Out)
- 栈的抽象数据类型
ADT stack
Data
同线性表。元素具有相同的类型,相邻元素具有前驱和后继关系
Operation
InitStack(&S): 初始化,建立一个空栈
DestorStack(&S): 销毁栈
ClearStack(&S): 将栈清空
StackEmpty(&S): 判断栈是否为空栈
GetTop(S,*e): 获取栈顶元素
Push(&S,*e): 进栈
Pop(&S,*e): 出栈
StackLength(S): 返回栈S的元素个数
2.栈的顺序存储
- 顺序栈的结构定义代码
const int STACK_INIT_SIZE = 20;
const int OVERFLOW = -2;
typedef int SElemType;
typedef struct
{
SElmeType *base;//栈底指针
SElemType *top;//栈顶指针
int stacksize;//栈的大小
}SqStack;
- 栈的初始化
void InitStack(SqStack &S)
{
S.base = new SElemType[STACK_INIT_SIZE];//动态分配存储空间
if(!S.base) exit(OVERFLOW);
S.top = S.base;
S.stacksize = STACK_INIT_SIZE;
}
- 获取栈顶元素
void GetTop(SqStack &S,SElemType *e)
{
if(S.top == S.base) return;//空栈
*e = *(S.top - 1);
}
- 压栈操作
void Push(SqStack &S,SElemType e)
{
if(S.top - S.base >= S.stacksize) return;//满栈
*(S.top) = e;
S.top += 1;
}
- 出栈操作
void Pop(SqStack &S,SElemType *e)
{
if(S.top == S.base) return;//空栈
*e = *(S.top);
S.top--;
}
- 获取栈中元素个数
int StackLength(S)
{
int length = S.top - S.base;
return length;
}
3.栈的链式存储
- 链栈的定义代码
typedef struct StackNode
{
SelemType data;
struct StackNode *next;
}StackNode,*LinkStack;
- 链栈的初始化
void InitStack(LinkStack &S)
{
S = new StackNode;
S->next = NULL;
}
- 压栈操作
void Push(LinkStack &S,SElemType e)
{
LinkStack p;
InitStack(p);
p->data = e;
p->next = S;
S = p;
}
- 出栈操作
void Pop(LinkStack &S,SElemType *e)
{
LinkStack p;
if(S->next = NULL) return;
p = S;
*e = *(S->data);
S = p->next;
delete p;
}
本人也还在学习中,若有错误或不足请指教,互相学习!