顺序栈
-
用顺序存储方式实现的栈
#define MaxSize 10 //定义栈中元素的最大个数 typedef struct{ ElemType data[MaxSize]; //静态数组存放栈中元素 int top; //栈顶指针 }SqStack;
数组可以直接声明,静态声明的,已经分配好了内存了,之前那些需要分配内存的,是只声明了一个指针,而没有给指针执行具体的内存空间
-
基本操作
-
创(初始化)
void InitStack(SqStack &S){ S.top = -1; } void testStack(){ SqStack S;//声明一个顺序栈(分配空间) InitStack(S); }
-
增(进栈)
//新元素入栈 bool Push(SqStack &S,ElemType x){ if(S.top==MaxSize-1)//栈满,报错 return false; S.top = S.top+1; //指针先加1,top从-1变为0 S.data[S.top]=x; //新元素入栈 //S.data[++S.top]=x; return true; }
-
删(出栈)
bool Pop(SqStack &S,ElemType &x){ if(S.top==-1) //栈空,报错 return false; x=S.data[S.top]; //栈顶元素先出栈 S.top = S.top-1; return true; }
-
查(获取栈顶元素)
bool GetTop(SqStack S,ElemType &x){ if(S.top==-1) //栈空,报错 return false; x=S.data[S.top]; //x记录栈顶元素 return true; }
-
共享栈(两个共享同一片空间)
#define MaxSize 10 typedef struct{ ElemType data[MaxSize]; int top0; //0号栈顶指针 int top1; //1号栈顶指针 }ShStack; //初始化栈 void InitStack(ShStack &S){ S.top0 = -1; //初始化栈顶指针 S.top1 = MaxSize; } //判满的条件:top0+1 == top1
-
—图片来自B站王道考研(侵删)
所有的基本操作时间复杂度都是O(1)