专业课-数据结构(回文判断实验)

实验内容:
数据结构-用C语言描述(耿国华)P111实习题1
回文判断。
称正读与反读都相同的字符序列为“回文”序列。
试写一个算法,判断依次读入的一个以@为结束符的字母序列,是否为形如“序列1&序列2”模式的字符序列。其中序列1和序列2中都不含字符“&”,且序列2时序列1的逆序列。例如,“a+b&b+a”是属于该模式的字符序列,而“1+3&3-1”则不是。

#include <stdio.h>			//头文件
#define TRUE 1			//对TRUE与FALSE进行宏定义
#define FALSE 0

/*定义栈Stack用作存放输入的字符*/
typedef struct{ 
	char elem[100]; 
	int top;
}Stack;

/*预处理指令:初始化栈、入栈、出栈、判断栈是否为空*/
void InitStack(Stack *s);
int Push(Stack *s,char e);
int Pop(Stack *s,char *x);
int IsEmpty(Stack *s);

/*主函数*/ 
int main(){ 
	Stack s;								//定义存放输入字符栈的栈s 
	char ch;								//定义输入的字符为ch 
	char temp;							//当字符从栈中弹出时,使用temp暂存 
	InitStack(&s); 							//初始化栈s 
	printf("\n请输入以@为结尾的字符序列:"); 		//提示用户输入字符序列 
	ch=getchar(); 							//getchar单个输入字符 
	//当ch不为字符&时,压入栈s,循环输入字符
	while(ch!='&'){ 
		Push(&s,ch); 
		ch=getchar(); 
	} 

	/*当ch不为字符@并且栈s不为空时,将&后输入的字符与之前压入栈中的字符依次循环判断是否对应相等*/ 
	do{ 
		ch=getchar(); 						//得到&后输入的字符 
		Pop(&s,&temp);						 //将&之前压入栈s的字符出栈
		/*如果&后新输入的字符与栈s弹出的字符不依次对应相等,输出序列1与序列2不相同,返回FALSE*/ 
		if(ch!=temp){
			printf("\n序列1与序列2不相同"); 
			return(FALSE);
		}
 	}while(ch!='@' && !IsEmpty(&s)); 
		ch=getchar();		
/*当栈为空时并且输入的下一个字符为@时,说明序列1与序列2相同,反之不同*/
 		if(ch=='@' && IsEmpty(&s)){ 
		printf("\n序列1与序列2相同");
		return(TRUE);
	}else{ 
		printf("\n序列1与序列2不相同"); 
		return(FALSE); 
	}
}

/*初始化栈*/ 
void InitStack(Stack *s){ 
	s->top=-1;
}

/*入栈*/ 
int Push(Stack *s,char e){ 
	if(s->top!=99){ 
	(s->top)++; 
	s->elem[s->top]=e;
}else 
	return (FALSE);
}

/*出栈*/ 
int Pop(Stack *s,char *x){ 
	if(s->top!=-1){ 
		*x=s->elem[s->top]; 
		s->top--;
		return(TRUE); 
	}else 
		return(FALSE);
}
/*判断栈是否为空*/ 
int IsEmpty(Stack *s){
	if(s->top==-1) 
		return(TRUE); 
	return(FALSE);
}

学习感悟:
1.一开始的设置
Stack *s;
char *temp;
后面的引用相应改变,但是只能在手机上运行,无法在电脑上运行,于是一直在debug,最后改成了
Stack s;
char tempt;
后面相应使用&进行引用,但是不太清楚为什么,如果有知道同学可以告诉我一下,谢谢您!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值