实现顺序栈各种基本运算的算法(单指针版)(c++)
代码支持实现初始化、栈空、栈满、取栈顶、进栈、出栈。
代码分为2部分,一个函数部分,一个主函数。
函数部分
#include<stdio.h>
#include<malloc.h>
#define maxsize 100
typedef struct
{
char data[maxsize];//栈
int top;//栈顶指针
}sqstack;
void init(sqstack *&s)//初始化栈s
{
s=(sqstack *)malloc(sizeof(sqstack));
s->top=-1;//栈顶指针最初为-1
}
void destroy(sqstack *&s)//销毁栈
{
free(s);
}
bool stackempty(sqstack *s)//判断栈是否为空
{
return (s->top==-1);//为空,返回1
}
bool push(sqstack *&s,char e)//入栈操作
{
if(s->top==maxsize-1)//判断栈是否溢出
return false;//溢出,报错
s->top++;//没溢出,栈顶指针指向上一个
s->data[s->top]=e;//将元素入栈至栈顶位置
return true;
}
bool pop(sqstack *&s,char &e)//出栈操作
{
if(s->top==-1)//判断栈是否为空0
return false;//为空,报错
e=s->data[s->top];//元素e存储栈顶位置元素
s->top--;//栈顶指向下一个
return true;
}
bool gettop(sqstack *s,char &e)//取向栈顶元素
{
if(s->top==-1)//判断栈是否为空0
return false;//为空,报错
else e=s->data[s->top];//将元素e存储栈顶元素
return true;
}
主函数
#include<stdio.h>
#include<malloc.h>
#define maxsize 100
typedef struct
{
char data[maxsize];
int top;
}sqstack;
extern void init(sqstack *&s);
extern void destroy(sqstack *&s);
extern bool stackempty(sqstack *s);
extern bool push(sqstack *&s,char e);
extern bool pop(sqstack *&s,char &e);
extern bool gettop(sqstack *s,char &e);
void main()
{
char e;
sqstack *s;
printf("栈s的基本运算如下:\n");
printf("(1)初始化栈s\n");
init(s);
printf("(2)栈为%s\n",(stackempty(s)?"空":"非空"));
printf("(3)依次进栈元素a,b,c,d,e\n");
push(s,'a');push(s,'b');push(s,'c');push(s,'d');push(s,'e');
printf("(4)栈为%s\n",(stackempty(s)?"空":"非空"));
printf("(5)出栈序列:");
while(!stackempty(s))
{
pop(s,e);
printf("%c",e);
}
printf("\n");
printf("(6)栈为%s\n",(stackempty(s)?"空":"非空"));
printf("(7)释放栈\n");
destroy(s);
}
输出
有的时候,真的不得不承认,c语言和c++的差距,一些打着c语言的书,里面却是一些只有在c++里面才行得通的语法。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)