用堆栈翻转的例子reverse string gnirts esrever

详细解释的过程

reverse string gnirts esrever

每行加了注释 

#include<stdio.h>	//标准输出
#include<string.h>  //字符串处理
#include<stdlib.h>  //标准库
#define StackSize 100 //假定预分配的栈空间最多为100个元素

//定义栈的结构体
typedef struct
{
	char data[StackSize];// 存储元素的数组
	int top; //栈顶指针
}SeqStack;
//初始化栈
void Init(SeqStack *&s)
{
    s=(SeqStack *)malloc(sizeof(SeqStack)); //分配内存
    s->top=-1; //初始化栈顶指针
}
//入栈 
void push(SeqStack *s,char e)
{
	if( s->top == StackSize )
	{
		printf("栈满\n");
	}
	else
	{
		//移动栈顶指针
		s->top++;
		//将数据加入栈中
        s->data[s->top]=e;
	}
}
//出栈
char pop(SeqStack *s)
{
	if( s->top == -1 )
	{
		//栈为空
		printf("栈空\n");
		return  '\0';
	}	
	//获取数据,并将数据移出栈
	return (s->data[s->top--]);
}
//反转字符串
void reverse(char str[])
{
	//定义变量
	SeqStack *stack;
	//定义变量,flag标志着字符串是否对称,1:对称,0:不对称
	int i=0,length;
	//获取字符串长度
	length = strlen(str);
	//初始化栈
	Init(stack);
	//遍历字符串,将字符入栈
	for( i=0; i<length; i++)
	{
		//入栈
		push(stack,str[i]);
	}
	printf("反转后的字符串:");
	//利用出栈反转字符串
	for( i=0; i<length; i++)
	{
		printf("%c",pop(stack)); 
	} 
	printf("\n"); 
}

void main()
{
	//定义变量
	char str[StackSize];
	printf("请输入要反转的字符串:");
	//获取用户输入的字符串
	gets(str);
	//反转字符串
	reverse(str);
}

 

请把代码发出来看看,便于分析原因。

您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

速戳参与调研>>>https://t.csdnimg.cn/Kf0y