大话数据结构-栈
栈的定义
stack是限定仅在表尾进行插入和删除操作的线性表,允许插入和删除的一端称为栈顶,另一端称为栈底
- 栈又称为后进先出的线性表,简称LIFO结构
- 栈的插入操作,为压栈、入栈;栈的删除操作,为出栈
typedef int SElemType; /*SElemType类型根据实际情况而定,这里假设为int*/
typedef struct
{
SElemType data[MAXSIZE];
int top; /*空栈top=-1,栈满etc*/
}SqStack;
栈的顺序存储结构
/*进栈操作 插入元素e为新的栈顶元素*/
Status Push(SqStack *S,SElemType e)
{
if(S->top == MAXSIZE -1) /*栈满*/
{
return ERROR;
}
S->top++; /*栈顶指针增加一*/
S->data[S->top] = e; /*将新插入元素赋值给栈顶空间*/
return OK;
}
/*出栈操作:若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR*/
Status Pop(SqStack *S,SElemType *e)
{
if(S->top == -1)
return ERROR;
*e=S->data[S->top]; /*将要删除的栈顶元素赋值给e*/
S->top--; /*栈顶指针减一*/
return OK;
}
两栈共享空间——使用数组来存储两个栈
- 相同类型的栈的设计技巧
- top1+1==top2(栈满);栈1为空栈,top2=0,栈2满;栈2为空栈,栈1的top1为n-1,栈1满。
/*两栈共享空间结构*/
typedef struct
{
SElemType data[MAXSIZE];
int top1; /*栈1栈顶指针*/
int top2; /*栈2栈顶指针*/
}SqDoubleStack;
Status Push(SqDoubleStack *S,SElemType e, int stacklNumber)
{
if(S->top1+1==S->top2) /*栈满