栈是一种操作受限的线性表,LIFO。
栈:逻辑结构
顺序栈:使用顺序存储方式实现的栈
栈空条件:S.top == -1
栈满条件:S.top == MaxSize-1
栈长:S.top+1
非空条件下,top始终指向栈尾元素。
#define MaxSize 50
//栈的顺序存储结构
typedef struct{//数据用数组存放
int data[MaxSize];
//存储数组最后一个元素的下标,代表栈顶指针
int top;
} SqStack;
初始化顺序栈://初始化顺序栈,将栈顶指针置为-1
void InitStack(SqStack &S){S.top = -1;
}
判栈空 ://判栈空
bool StackEmpty(SqStack S){if(S.top == -1){return true;
}
return false;
}
入栈://入栈
bool Push(SqStack &S,int x){//判断栈满,S.top范围:-1,0~49
if(S.top == MaxSize-1){return false;
}
//首先top+1,然后入栈
S.data[++S.top] = x;
return true;
}
出栈://出栈,只是逻辑结构上的出栈,top--,存储结构上看出栈的元素还在内存中
bool Pop(SqStack &S,int &x){//判断栈满,S.top范围:-1,0~49
if(S.top == MaxSize-1){return false;
}
//首先出栈,然后top-1
S.data[S.top--];
return true;
}
读栈顶元素://读栈顶元素
bool GetTop(SqStack S,int &x){//判栈空
if(S.top == -1){return false;
}
//top即栈顶元素的下标
x = S.data[S.top];
return true;
}
测试:#include#include//使用malloc和free关键字需要引入这个库
#define MaxSize 50
//栈的顺序存储结构
typedef struct{//数据用数组存放
int data[MaxSize];
//存储数组最后一个元素的下标,代表栈顶指针
int top;
} SqStack;
//初始化顺序栈,将栈顶指针置为-1
void InitStack(SqStack &S){S.top = -1;
}
//判栈空
bool StackEmpty(SqStack S){if(S.top == -1){return true;
}
return false;
}
//入栈
bool Push(SqStack &S,int x){//判断栈满,S.top范围:-1,0~49
if(S.top == MaxSize-1){return false;
}
//首先top+1,然后入栈
S.data[++S.top] = x;
return true;
}
//出栈,只是逻辑结构上的出栈,top--,存储结构上看出栈的元素还在内存中
bool Pop(SqStack &S,int &x){//判断栈满,S.top范围:-1,0~49
if(S.top == MaxSize-1){return false;
}
//首先出栈,然后top-1
S.data[S.top--];
return true;
}
//读栈顶元素
bool GetTop(SqStack S,int &x){//判栈空
if(S.top == -1){return false;
}
//top即栈顶元素的下标
x = S.data[S.top];
return true;
}
//打印栈
void Print(SqStack S){printf("栈内元素:");
for(int i=0;i<=S.top;i++){printf("%d ",S.data[i]);
}
printf("栈顶指针:%d\n",S.top);
}
int main(){//声明一个结构体类型的顺序栈元素
SqStack S;
//初始化
InitStack(S);
printf("当前栈是否为空:%d\n",StackEmpty(S));
//入栈
Push(S,3);
Push(S,2);
Push(S,4);
Push(S,6);
printf("当前栈是否为空:%d\n",StackEmpty(S));
//读栈顶元素
int x = 0;
GetTop(S,x);
printf("当前栈顶元素:%d\n",x);
//出栈
Pop(S,x);
printf("出栈元素:%d\n",x);
GetTop(S,x);
printf("当前栈顶元素:%d\n",x);
//打印栈
Print(S);
}
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
当前名称:C语言栈实现:顺序栈-创新互联
路径分享:https://www.cdcxhl.com/article14/espge.html
成都网站建设公司_创新互联,为您提供云服务器、全网营销推广、网站内链、企业网站制作、动态网站、App设计
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联