栈的顺序存储结构及实现
程序员文章站
2022-06-05 13:41:22
...
栈是线性表的特例,栈只在栈顶进行插入及删除操作,因此数据是后进先出。栈的顺序存储其实也是线性表顺序存储的简化。
栈的结构定义如下:
typedef int SElemType;
typedef Struct
{
SElemType data[MAXSIZE];
int top; //栈顶指针
}SqStack;
进栈操作push,其代码如下:
/*插入元素e为新的栈顶元素*/
Stauts Push(SqStack *S, SElemType *e)
{
if(S->top == MAXSIZE-1) //栈满
{
return ERROR;
}
S->top++; //栈顶指针+1
S->data[S->top] = e; //将新元素赋值给栈顶空间
return OK;
}
出栈操作pop,其代码如下:
/*若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则,返回ERROR*/
Status Pop(SqStack *S, SElemType *e)
{
if(S->top == -1)
return ERROR;
*e = S->data[S->top]; //将要删除的元素值赋值给e
S->top--; //栈顶指针-1
return OK:
}
由于栈的顺序存储没有用到循环,因此时间复杂度均为O(1).