顺序栈及其操作
一、顺序栈的基本概念
栈是一种特殊的线性表,规定它的插入和删除运算均在线性表的同一端进行,进行插入和删除操作的那一端称为栈顶,另一端称为栈底。栈的插入和删除操作分别简称进栈和出栈。
顺序栈的基本存储结构
#define Maxsize 100
typedef int datatype;
typedef struct {
datatype a[Maxsize];
int top;
}sequence_stack;
二、顺序栈的操作集合
//void init(sequence_stack *s)
//int empty(sequence_stack s)
//int full(sequence_stack s)
//datatype get_top(sequence_stack *s)
//void pop(sequence_stack *s)
//void push(sequence_stack *s,datatype x)
//void print_down(sequence_stack s)
//void print_up(sequence_stack s)
三、顺序栈的代码实现
顺序栈的初始化
/**************************************/
/* 函数名:init */
/* 函数功能:顺序栈的初始化--置空栈 */
/* 函数参数:s顺序栈 */
/* 函数返回值:null */
/**************************************/
void init(sequence_stack *s)
{
s->top=-1;
}
判断顺序栈是否为空
/**************************************/
/* 函数名:empty */
/* 函数功能:判断顺序栈是否为空 */
/* 函数参数:s顺序栈 */
/* 函数返回值:int。1为栈空,0为非空 */
/**************************************/
int empty(sequence_stack s)
{
return s.top==-1? 1:0;
}
判断顺序栈是否满
/**************************************/
/* 函数名:full */
/* 函数功能:判断顺序栈是否满 */
/* 函数参数:s顺序栈 */
/* 函数返回值:int。1为栈满 */
/**************************************/
int full(sequence_stack s)
{
return s.top==Maxsize-1? 1:0;
}
取出栈顶元素
/**************************************/
/* 函数名:get_top */
/* 函数功能:取出栈顶元素 */
/* 函数参数:s顺序栈 */
/* 函数返回值:datatype。-999栈为空 */
/**************************************/
datatype get_top(sequence_stack s)
{
if(empty(s)){
printf("栈为空,无法取出栈顶元素!\n");
return -999;
}
else
return s.a[s.top];
}
出栈
/*******************************/
/* 函数名:pop */
/* 函数功能:出栈 */
/* 函数参数:s顺序栈 */
/* 函数返回值:null */
/*******************************/
void pop(sequence_stack *s)
{
if(empty(*s))
printf("栈为空,无法出栈!\n");
else{
s->top--;
//printf("成功出栈!\n");
}
}
进栈
/*******************************/
/* 函数名:push */
/* 函数功能:进栈 */
/* 函数参数:s顺序栈 */
/* x进栈元素 */
/* 函数返回值:null */
/*******************************/
void push(sequence_stack *s,datatype x)
{
if(!full(*s)){
s->a[++s->top]=x;
//printf("成功进栈!\n");
}
else{
printf("栈已满,无法进栈!\n");
}
}
打印栈(从上到下)
/********************************/
/* 函数名:print */
/* 函数功能:打印栈(从上往下) */
/* 函数参数:s顺序栈 */
/* 函数返回值:null */
/********************************/
void print_down(sequence_stack s)
{
int i;
if(!empty(s)){
for(i=s.top;i>=0;i--)
printf("%d ",s.a[i]);
printf("\n");
}
}
打印栈(从下到上)
/********************************/
/* 函数名:print */
/* 函数功能:打印栈(从下往上) */
/* 函数参数:s顺序栈 */
/* 函数返回值:null */
/********************************/
void print_up(sequence_stack s)
{
int i;
if(!empty(s)){
for(i=0;i<=s.top;i++)
printf("%d ",s.a[i]);
printf("\n");
}
}
φ(゜▽゜*)♪ 感谢观看,希望对你有帮助!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具