代码只进行了简单的测试 如果代码存在问题 欢迎各位带哥在评论区指出
数据结构
typedef struct{
ElemType *base; //栈底指针
ElemType *top; //栈顶指针
int stacksize; //栈容量
}SqStack;
栈的原子操作实现
1.初始化栈
Status InitStack(SqStack &S)
{
//构造空栈
S.base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType));
if(!S.base)
exit(OVERFLOW);
S.top = S.base;
S.stacksize = STACK_INIT_SIZE;
return OK;
}
2.销毁栈
Status DestroyStack(SqStack &S)
{
//销毁栈
free(S.base);
S.base = NULL;
S.top = NULL;
S.stacksize = 0;
return OK;
}
3.入栈
Status Push(SqStack &S, ElemType e)
{
//插入e为栈顶元素
if(S.top - S.base == S.stacksize)
{
//栈满扩容
S.base = (ElemType*) realloc(S.base, (S.stacksize+STACKINCREMENT)*sizeof(ElemType));
if(!S.base)
exit(OVERFLOW);
S.top = (S.base + S.stacksize); //使S.top重新指向栈顶
S.stacksize += STACKINCREMENT;
}
*S.top++ = e;
return OK;
}
4.出栈
Status Pop(SqStack &S,ElemType &e)
{
//若栈不空则栈顶元素出栈并用e带回其值
if(S.top == S.base)
return ERROR;
e = *(--S.top);
return OK;
}
5.判空
Status StackEmpty(SqStack S)
{
//判栈空
if(S.top == S.base)
return true;
else
return false;
}
6.获取栈内元素个数
int StackLength(SqStack S)
{
//获得栈中元素长
return S.top -S.base;
}
7.获取栈顶元素
Status GetTop(SqStack S, ElemType &e)
{
//获取栈顶元素
if(S.top == S.base)
return ERROR;
e = *(S.top-1);
return OK;
}
8.打印栈
void PrintStack(SqStack S)
{
//打印栈
ElemType *p = S.base;
if(S.base == S.top)
{
printf("Empty Stack\n");
return;
}
while(p < S.top)
{
printf("%d", *p);
p++;
}
printf("\n");
}