利用顺序栈实现回文数的判断的代码
时间: 2024-10-06 14:02:28 浏览: 12
利用顺序栈(也叫数组栈)判断一个整数是否是回文数的算法通常是这样的:
```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;
}
```
python设计一个算法利用顺序栈的基本运算判断一个字符串是否为回文
为了在 Python 中利用顺序栈(通常称为列表或数组)的基本运算是判断一个字符串是否为回文,我们可以按照以下步骤创建一个算法:
1. 创建一个空栈 `stack` 和两个指针,一个指向字符串的开始 `start`,另一个指向结束 `end`。
2. 循环条件:当 `start` 小于 `end` 时,继续循环。
3. 将字符从字符串中弹出栈顶(即 `str[start]`),然后将 `start` 向右移动一位(`start += 1`)。
4. 检查栈顶字符是否等于当前字符串的下一个字符 `str[end]`。如果相等,则继续;如果不等,则说明不是回文,返回 `False`。
5. 如果所有字符都一一对应且相等,就表示字符串是回文,`end` 同样向左移动一位(`end -= 1`),直到 `start >= end`。
6. 当所有的比较都完成且没有发现不匹配的字符时,字符串是回文,返回 `True`。
以下是这个算法的 Python 代码实现:
```python
def is_palindrome(s):
stack = list(s) # 将字符串转换成列表方便操作
start, end = 0, len(stack) - 1
while start < end:
if stack[start] != stack[end]:
return False
start += 1
end -= 1
return True
# 示例
s = "racecar"
print(is_palindrome(s)) # 输出: True
s = "hello"
print(is_palindrome(s)) # 输出: False
```