利用顺序栈实现回文数的判断的代码
时间: 2024-10-06 11:02:28 浏览: 62
利用顺序栈(也叫数组栈)判断一个整数是否是回文数的算法通常是这样的:
```python
def isPalindrome(num):
if num < 0: # 负数不是回文数
return False
stack = [] # 初始化空栈
temp = num # 创建临时变量存储数字
while temp != 0:
digit = temp % 10 # 取出最后一位
stack.append(digit) # 入栈
temp //= 10 # 移除最后一位
while len(stack) > 0:
if stack.pop() != temp % 10: # 如果栈顶元素和当前数字不匹配,则不是回文
return False
temp //= 10 # 移除并更新temp
return True # 数字是回文,返回True
# 测试示例
print(isPalindrome(121)) # 输出:True
print(isPalindrome(123)) # 输出:False
```
这个代码首先检查输入的数是否为负数,然后将它的每一位数字压入栈中。接着,它从栈中取出每个元素并与下一个数字比较。如果所有对应位置的数字都相等,那么原始数字就是回文。
相关问题
c语言利用顺序栈判断是否是回文串,写函数模块代码
好的,以下是判断回文串的函数模块代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 100
typedef struct stack {
char data[MAXSIZE];
int top;
} Stack;
void InitStack(Stack *S) {
S->top = -1;
}
int PushStack(Stack *S, char c) {
if(S->top == MAXSIZE - 1)
return 0;
S->data[++S->top] = c;
return 1;
}
int PopStack(Stack *S, char *c) {
if(S->top == -1)
return 0;
*c = S->data[S->top--];
return 1;
}
int checkPalindrome(char *str) {
Stack S;
InitStack(&S);
int length = strlen(str);
for (int i = 0; i < length / 2; i++) {
PushStack(&S, str[i]);
}
int mid = length / 2;
if (length % 2 == 1)
mid++;
char c;
for (int i = mid; i < length; i++) {
PopStack(&S, &c);
if (c != str[i])
return 0;
}
return 1;
}
int main() {
char str[MAXSIZE];
scanf("%s", str);
if(checkPalindrome(str))
printf("Yes\n");
else
printf("No\n");
return 0;
}
```
设计一个算法利用顺序栈的基本运算判断一个字符串是否是回文
设计一个判断字符串是否是回文的算法,可以使用两个指针,一个从字符串的开始位置(索引0),另一个从字符串的结束位置(索引字符串长度减1)向中间移动。同时,我们还需要一个顺序栈来辅助存储字符。
1. 首先,创建一个空的顺序栈。
2. 将开始位置的字符压入栈中。
3. 比较当前位置(start)和结束位置(end)的字符。如果它们相等,则继续比较下一个字符;如果不等,则该字符串不是回文,返回false。
4. 如果字符相等,将结束位置减一,开始位置加一,继续上述步骤直到相遇或其中一个为空。
5. 如果所有的字符都进行了有效比较并且全部相等,说明字符串是回文,返回true。
以下是伪代码描述:
```
function isPalindrome(s):
stack = []
start, end = 0, len(s) - 1
while start < end:
# 将起始位置的字符推入栈中
if s[start] != s[end]:
return False
stack.push(s[start])
start += 1
end -= 1
# 如果所有字符都已检查,并且栈顶元素等于剩余未检查部分
while not stack.isEmpty():
if stack.pop() != s[end]:
return False
end -= 1
return True
```
阅读全文