实验目的
利用栈的基本操作对给定的字符串判断其是否是回文,若是则输出“Right”,否则输出 “Wrong”。例如:”aba”就是回文,从左向右读,从右向左读 一样。
实验内容
确定一个字符栈顺序存储结构,存储最大元素个数为10个
开放一个对外部调用的函数 int symmetry(char *string),判断字符内容的对称性
实验步骤
- 创建一个字符栈顺序存储结构的结构体
CharStack
以及结构体指针类型CharStackLink
。
#define MAXSTACK 10
/** 字符栈模型 */
typedef struct {
char Data[MAXSTACK];
int top;
} CharStack, *CharStackLink;
- 开放一个外部接口 int symmetry(char *string) ,这个函数对外来字符串提供验证是否回文的判断。
/** 字符回文判断,1为回文,0为非回文 */
int symmetry(char *string);
- 内部实现 symmetry 函数依赖于三个方法
charStackInit
(初始化栈)、charStackPush
(元素进栈)、charStackPop
(元素出栈)
3.1. 实现内部创建栈的方法 charStackInit
,并返回这个栈实例对象
/** 初始化栈 */
CharStackLink charStackInit() {
CharStackLink stack = (CharStackLink)malloc(sizeof(CharStack));
stack->top = -1;
return stack;
}
3.2. 实现内部元素进栈方法charStackPush
,接收两个参数,一个是元素将要压入的栈stack
,进栈元素。
/** 进栈 */
void charStackPush(CharStackLink stack, char data) {
if (stack->top >= MAXSTACK) {
err(1, "栈已满");
return;
}
stack->top = stack->top + 1;
stack->Data[stack->top] = data;
}
3.3. 实现内部元素出栈方法charStackPop
,接收一个对应出的栈stack
参数,返回一个出栈元素
/** 出栈 */
char charStackPop(CharStackLink stack) {
if (stack->top <= -1) {
err(1, "栈已空");
return 0;
}
char a = stack->Data[stack->top];
stack->top = stack->top - 1;
return a;
}
3.4. 实现symmetry
方法,接收一个外部传来的string,返回一个二元 int 值,0为非回文数,1为回文数
/** 字符栈模型回文 1 为回文树 0 为非回文数 */
int symmetry(char *string) {
//初建栈
CharStackLink charStack = charStackInit();
for (int i = 0; string[i]; i++) {
charStackPush(charStack, string[i]);
}
for (int i = 0; string[i]; i++) {
char c = string[i];
char stackC = charStackPop(charStack);
if (c != stackC) {
return 0;
}
}
free(charStack);
charStack = NULL;
return 1;
}
3.5. 在入口main函数中实现调用,为了方便多次测试写入一个do -> while循环,代码如下
int main(int argc, const char * argv[]) {
int flag = 1;
do {
char charArr[10];
printf("请输入需要验证文本:");
scanf("%s",charArr);
int isHuiWen = symmetry(charArr);
printf("%s\n", isHuiWen?"Right":"Wrong");
printf("是否继续,输入-1退出:");
scanf("%d",&flag);
} while (flag != -1);
return 0;
}
3.6 到这里代码已经编写完毕,运行,输入多次,查看结果
第一次运行测试
请输入需要验证文本:12321
Right
是否继续,输入-1退出:1
请输入需要验证文本:12344321
Right
是否继续,输入-1退出:1
请输入需要验证文本:6556
Right
是否继续,输入-1退出:1
请输入需要验证文本:654abc
Wrong
是否继续,输入-1退出:1
请输入需要验证文本:mlmk
Wrong
是否继续,输入-1退出:-1
Program ended with exit code: 0
第二次运行测试
1
Right
是否继续,输入-1退出:1
请输入需要验证文本:122
Wrong
是否继续,输入-1退出:1
请输入需要验证文本:121
Right
是否继续,输入-1退出:1
请输入需要验证文本:bab
Right
是否继续,输入-1退出:1
请输入需要验证文本:babcd
Wrong
是否继续,输入-1退出:1
请输入需要验证文本:babcdcbab
Right
是否继续,输入-1退出:
网友评论