好人一生平安,各位大佬帮帮忙
题目:回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。试写一个算法判定给定的字符向量是否为回文。(提示:将一半字符入栈)函数的原型为:bool isPalindrome(string s);是回文返回true,不是返回flase。
请使用栈实现进制转换,将十进制数n转换为m进制的数,函数名称为void convert(int n, int m);使用题目1中的代码文件进行做题。
文件代码如下:
StackLInk.java:
class Node {
int data;
Node next;
public Node(int data) {
this.data = data;
this.next = null;
}
}
public class StackLink {
private Node top;
public static void main(String[] args) {
StackLink stack = new StackLink();
stack.push(10);
stack.push(20);
stack.push(30);
stack.display();
System.out.println("寮瑰嚭鍏冪礌涓猴細" + stack.pop());
System.out.println("鏍堥《鍏冪礌涓猴細" + stack.peek());
stack.display();
}
/**
* 鍒涘缓鏍
*/
public StackLink() {
top = null;
}
/**
* 鍏冪礌鍏ユ爤
* @param x
*/
public void push(int x) {
// 鍒涘缓鏂拌妭鐐
Node newNode = new Node(x);
// 鏂拌妭鐐圭殑next鎸囧悜鏍堥《鍏冪礌
newNode.next = top;
// 鏍堥《鎸囧悜鏂拌妭鐐
top = newNode;
}
/**
* 鍏冪礌鍑烘爤
* @return
*/
public int pop() {
if (top == null) {
System.out.println("Stack is empty");
return -1;
}
// 鏍堥《鍏冪礌鍑烘爤
int x = top.data;
// 鏍堥《鎸囧悜涓嬩竴涓厓绱
top = top.next;
return x;
}
/**
* 杩斿洖鏍堥《鍏冪礌
* @return
*/
public int peek() {
if (top == null) {
System.out.println("Stack is empty");
return -1;
}
return top.data;
}
/**
* 鍒ゆ柇鏍堟槸鍚︿负绌
* @return
*/
public boolean isEmpty() {
return top == null;
}
/**
* 鏄剧ず鏍堟墍鏈夊厓绱
*/
public void display() {
Node temp = top;
while (temp != null) {
System.out.print(temp.data + " ");
temp = temp.next;
}
System.out.println();
}
}
Stack.java:
import java.util.Arrays;
public class Stack{
private int[] stack;
private int size;
public static void main(String[] args) {
Stack stack = new Stack();
stack.push(1);
stack.push(2);
stack.push(3);
stack.printAllElement();
System.out.println("鏍堥《鍏冪礌锛" + stack.peek() + " 澶у皬锛" + stack.size);
System.out.println("鍑烘爤锛" + stack.pop());
stack.printAllElement();
}
/**
* 鍒涘缓鏍
*/
public Stack() {
stack = new int;
size = 0;
}
/**
* 鍒ゆ柇鏍堟槸鍚︿负绌
* @return
*/
public boolean isEmpty() {
return size == 0;
}
/**
* 娓呯┖鏍
*/
public void clear() {
stack = new int;
size = 0;
}
/**
* 杩斿洖鏍堥《鍏冪礌
* @return 鏍堥《鍏冪礌
*/
public int peek() {
if (size > 0) {
return stack;
} else {
return -1;
}
}
/**
* 鍏冪礌鍏ユ爤
* @param e
*/
public void push(int e) {
judgeStackSize(size + 1);
stack = e;
size += 1;
}
/**
* 鍏冪礌鍑烘爤
* @return
*/
public int pop() {
int e = this.peek();
stack = 0;
size -= 1;
return e;
}
/**
* 鎵撳嵃鏍堜腑鎵鏈夊厓绱狅紝浠庢爤椤跺埌鏍堝簳
*/
public void printAllElement() {
for (int i = size - 1; i >= 0; i--) {
System.out.println(stack);
}
}
/**
* 鍒ゆ柇鏍堢殑绌洪棿鏄惁瓒冲锛屼笉瓒冲垯鎵╁
* @param size
*/
private void judgeStackSize(int size) {
int stackLength = stack.length;
if (size > stackLength) {
int expaned_size = size + 10;
stack = Arrays.copyOf(stack, expaned_size);
}
}
}
对于第一个问题,判断给定的字符向量是否是回文的算法可以使用栈来实现。具体步骤如下:
1. 创建一个空栈。
2. 将字符串的前一半字符依次入栈。
3. 如果字符串长度是奇数,跳过中间的字符。
4. 遍历剩余的字符串的字符。
5. 每次遍历时,比较当前字符和栈顶元素是否相等。
6. 如果相等,将栈顶元素出栈继续比较下一个字符。
7. 如果不相等,字符串不是回文,返回false。
8. 如果所有字符都比较完毕,并且栈为空,说明字符串是回文,返回true。
9. 如果所有字符都比较完毕,但栈不为空,说明字符串不是回文,返回false。
下面是使用Java语言实现的代码:
import java.util.Stack;
public class Palindrome {
public static boolean isPalindrome(String s) {
int length = s.length();
Stack<Character> stack = new Stack<>();
// 将前一半字符入栈
for (int i = 0; i < length / 2; i++) {
stack.push(s.charAt(i));
}
// 判断字符串长度是奇数还是偶数
int offset = length % 2 == 0 ? 0 : 1;
// 遍历剩余的字符并与栈顶元素比较
for (int i = length / 2 + offset; i < length; i++) {
if (s.charAt(i) != stack.pop()) {
return false;
}
}
// 如果栈不为空,说明字符串长度为奇数且最中间的字符与栈顶元素不相等
if (!stack.isEmpty()) {
return false;
}
return true;
}
public static void main(String[] args) {
String s1 = "abba";
String s2 = "abdba";
String s3 = "good";
System.out.println(isPalindrome(s1));// true
System.out.println(isPalindrome(s2));// true
System.out.println(isPalindrome(s3));// false
}
}
对于第二个问题,将十进制数转换为m进制的数可以使用栈来实现。具体步骤如下:
1. 创建一个空栈。
2. 进行循环,直到十进制数变为0。
3. 每次循环时,将十进制数除以m的余数入栈。
4. 将十进制数除以m的商作为下一次循环的十进制数。
5. 当十进制数变为0时,结束循环。
6. 将栈中的元素依次出栈,得到的就是转换后的m进制数。
下面是使用Java语言实现的代码:
import java.util.Stack;
public class Convert {
public static void convert(int n, int m) {
Stack<Integer> stack = new Stack<>();
while (n > 0) {
stack.push(n % m);
n /= m;
}
while (!stack.isEmpty()) {
System.out.print(stack.pop());
}
}
public static void main(String[] args) {
convert(10, 2);// 输出1010
System.out.println();
convert(15, 16);// 输出F
}
}
希望对你有帮助,祝你学习进步!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]