回文使用堆栈
发布时间:2020-12-16 04:53:32 所属栏目:百科 来源:网络整理
导读:我们的教授要求我们通过使用堆栈来检查单词是否是回文. 每次运行它都会出现错误:未处理的异常.访问违规我做错了什么?我怎样才能改进我的代码?我的代码如下: typedef struct stack{ char name; struct stack * next;}Stack;void push(Stack**head,char va
我们的教授要求我们通过使用堆栈来检查单词是否是回文.
每次运行它都会出现错误:未处理的异常.访问违规我做错了什么?我怎样才能改进我的代码?我的代码如下: typedef struct stack{ char name; struct stack * next; }Stack; void push(Stack**head,char value); char pop(Stack**head); int main(){ char word[11]; int i=0; int lenght = 0; Stack*head = NULL; printf("Please type the word: "); scanf("%s",word); lenght = strlen(word); while(word[i]!=' '){ push(&head,word[i]); i++; } i = 0; while(pop(&head)==word[i]){ i++; } if(i==lenght) printf("The word is a palindrome"); else printf("The word is not a palindrome"); } 解决方法
你的推送功能应该采取
>堆栈头的地址(你说的是正确的)和 所以方法签名变为: void push(Stack**head,char value); 并在函数体中,您将值添加到堆栈顶部: temp->name = value; 此外,您必须始终检查malloc的返回值. 由于您从函数pop返回弹出值,因此它的返回类型不能为void,在声明和定义中将其更改为char: char pop(Stack**head) 还有另一个逻辑错误: 首先,将输入的所有字符推入堆栈.接下来,您开始弹出角色.弹出没有终止条件.当您弹出所有字符(因此您的堆栈为空)时,下一次调用pop会导致崩溃,因为您将取消引用NULL指针(* head将为NULL). 要解决此问题,您只需弹出您所执行的字符: while(i<lenght && pop(&head)==word[i]){ 自从&&短路后,弹出所有角色后不会调出pop. 或者(和首选方法)是编写另一个名为isEmpty的函数,当堆栈为空时返回true / 1并在调用pop方法之前使用此方法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |