• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

wchenfeng

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

实现顺序栈各种基本运算的算法(单指针版)(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++里面才行得通的语法。

posted on 2022-04-12 20:02  王陈锋  阅读(255)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3