概述
顺序栈的表示与c语言实现<动态分配型>
#define STACK_INIT_SIZE 100 //存储空间初始分配量
#define STACKINCREMENT 10 //存储空间的分配增量<相对初始分配量较小,视具体情况而定>
typedef struct{
SElemType *base; //定义类型为SElemType类型的指针指向栈底,即栈底指针
//在栈构造之前和销毁之后,base的值为NULL
SElemType *top; //定义栈顶指针,指向栈顶元素的下一个位置 ①
int stacksize; //定义当前存储空间总量stacksize,以元素SElemtype为单位
}SqStack;
1,创建并初始化顺序栈
int InitStack(SqStack *S)
{
//1.动态申请存储空间
S->base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
//判断是否申请成功
if(!S->base) return 0; //S->base==NULL;
//2.初始化SqStack结构各个成员
S->top=S->base;
S->stacksize=STACK_INIT_SIZE;
return 1;
}
2,判栈空,空返回1,否则返回0
int StackEmpty(SqStack S)
{
//若栈顶指针指向栈底则栈为空
if(S.top==S.base)return 1;
else return 0; //return S.top==S.base?1:0;
}
3,判栈满,满返回1,否则返回0
int StackFull(SqStack S)
{
if(S.top-S.base==S.stacksize) return 1;
else return 0; //return S.top-S.base==S.stacksize?1:0;
}
4,入栈 成功插入返回1,否则返回0
int Push(SqStack *S,SElemType e)
{
//栈满,申请分配更多空间
if(S->top-S->base==S->stacksize)
{
SElemType *newbase=(SElemType *)realloc(S->base,(S->stacksize+
STACKINCREMENT)*sizeof(SElemType));
if(newbase==NULL)return 0;
//一旦空间申请成功,SqStack结构中各结构成员需更新
S->base=newbase;
S->top=S->base+S->stacksize;
S->stacksize+=STACKINCREMENT;
}
//入栈
*(S->top)=e;
S->top++;
return 1;
}
5,出栈,并用e返回栈顶元素
int Pop(SqStack *S,SElemType *e)
{
if(S->base==S->top)return 0;//判空
S->top--;
*e=*(S->top);
return 1;
}
6,获取栈顶元素并用e返回
int GetTop(SqStack S,SElemType *e)
{
if(S.base==S.top)return 0;//判空
S.top--;
*e=*(S.top); //取出栈顶指针所指元素的值并赋值给e
return 1;
}
7,访问栈中元素
int StackTraverse(SqStack S,void(*visit)(SElemType))
{ //函数指针做函数参数②
//1.首先用一指针指向栈顶元素<定位>
SElemType *p=S.top-1;
//2.循环遍历各个元素
while(p>=S.base)
{
visit(*p); //调用visit()方法实现具体操作
p--;
}
}
8,清空栈
int ClearStack(SqStack *S)
{
//1.判空,若栈本为空,返回0
if(S->top==S->base)return 0;
S->top==S->base;
return 1;
}
9,销毁栈
int DestroyStack(SqStack *S)
{
//判空,若栈本为空,返回0
if(S->top==S->base)return 0;
free(S->base); //释放空间
S->base=S->top=NULL; //指针为空
S->stacksize=0; //栈中无元素
return 1;
}
①关于栈顶指针具体指向,见博文<顺序栈栈顶指针指向详析>https://blog.csdn.net/qq_45818316/article/details/105092531
②函数指针部分详析,见博文<函数指针与指针函数>
本博文来自学习记录,如有不正确的地方欢迎各位大神指正 ^ – ^
最后
以上就是聪明小天鹅为你收集整理的顺序栈的表示与c语言实现之动态分配型的全部内容,希望文章能够帮你解决顺序栈的表示与c语言实现之动态分配型所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复