您的位置:首页 > 理论基础 > 数据结构算法

【数据结构】顺序栈的基本操作操作---C/C++

2014-10-23 20:43 701 查看
本博客所有文章均已迁入到<a target=_blank target="_blank" href="http://www.coderbean.com">http://www.coderbean.com</a>
//头文件内容
#define STACK_INIT_SIZE 10
#define STACKINCREMENT 2
struct SqStack
{
SElemType *base;
SElemType *top;
int stacksize;
};


//顺序栈的操作
//初始化,清空,压栈,出栈,遍历,销毁
 Status InitStack(SqStack &S)
{
if(!(A.base=(SElemType *)malloc(STACK_INIT_SIZE)*sizeof(SElemType))))
{
exit(OVERFLOW);//储存分配失败;
}
S.top = S.base;//栈顶和栈底指向同一位置
S.stacksize = STACK_INIT_SIZE;
return OK;
}

Status DestroyStack(SqStack &S)
{
    free(S.base);
    S.base = NULL;
    S.top = NULL;
    S.stacksize = 0;
    return OK;
}

Status ClearStack(SqStack &S)
{
S.top = S.base;
return OK;
}

Status StackEmpty(SqStack &S)
{
if(S.top == S.base)
return TRUE;
else
return FALSE;
}

Status StackLength(SqStack &S)
{
return (S.top - S.base);
}

Status GetTop(SqStack S, ElemType &e)
{
if(S.top > S.base)//注意判断当栈不为空是才能提取栈顶元素
{
e = *S.top--;
return OK;
}
else
return ERROR;
}
Status Push(SqStack &SElemType,ElemType e)
{
if(S.top - S.base>=S.stacksize)
{
S.base = (SElemType*)realloc(S.stacksize + S.base,STACKINCREMENT*sizeof(SElemType));
//记得要加上原来的容量realloc的用法
if(!S.base)
{
exit(OVERFLOW);
}
S.top = S.base + S.stacksize;
S.stacksize += STACKINCREMENT;
//注意以上两条语句的顺序
}
*++S.top = e;
return OK;
}

Status Pop(SqStack &S, SElemType *e)
{
if(S.top == S.base)
return ERROR;//首先要判断栈非空
e = *S.top--;
return OK;
}
Status StackTraverse(SqStack S, Status(*visit)(SElemType))
{
while(S.top != S.base)
{
visit(*S.base++);
}
printf('\n');
return OK;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息