鱼C论坛

 找回密码
 立即注册
查看: 650|回复: 1

好人一生平安,各位大佬帮帮忙

[复制链接]
发表于 2024-3-20 00:14:12 From FishC Mobile | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目:回文是指正读反读均相同的字符序列,如“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[10];
        size = 0;
    }

    /**
     * 鍒ゆ柇鏍堟槸鍚︿负绌
     * @return
     */
    public boolean isEmpty() {
        return size == 0;
    }

    /**
     * 娓呯┖鏍
     */
    public void clear() {
        stack = new int[10];
        size = 0;
    }

    /**
     * 杩斿洖鏍堥《鍏冪礌
     * @return 鏍堥《鍏冪礌
     */
    public int peek() {
        if (size > 0) {
            return stack[size - 1];
        } else {
            return -1;
        }
    }

    /**
     * 鍏冪礌鍏ユ爤
     * @param e
     */
    public void push(int e) {
        judgeStackSize(size + 1);
        stack[size] = e;
        size += 1;
    }

    /**
     * 鍏冪礌鍑烘爤
     * @return
     */
    public int pop() {
        int e = this.peek();
        stack[size - 1] = 0;
        size -= 1;
        return e;
    }

    /**
     * 鎵撳嵃鏍堜腑鎵鏈夊厓绱狅紝浠庢爤椤跺埌鏍堝簳
     */
    public void printAllElement() {
        for (int i = size - 1; i >= 0; i--) {
            System.out.println(stack[i]);
        }
    }

    /**
     * 鍒ゆ柇鏍堢殑绌洪棿鏄惁瓒冲锛屼笉瓒冲垯鎵╁
     * @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);
        }
    }

}

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-3-20 00:14:31 | 显示全部楼层
对于第一个问题,判断给定的字符向量是否是回文的算法可以使用栈来实现。具体步骤如下:

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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 01:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表