采用链表作为逻辑结构,因为链表可以动态地添加和删除元素,并且不需要预先定义容量。\n\n采用单向链表作为物理结构,因为单向链表的插入和删除操作比较简单,不需要修改指针的指向。\n\n解决该问题的思路、方法和流程如下:\n1. 定义短消息类,包含短消息内容和时间戳。\n2. 定义短消息链表类,包含链表头指针和链表长度。\n3. 实现短消息链表类的以下方法:\n - addMessage(message):添加短消息,如果链表长度超过20,则删除最早的短消息。\n - displayMessages():显示所有短消息。\n - readMessage(index):阅读指定索引的短消息。\n - deleteMessage(index):删除指定索引的短消息。\n - deleteAllMessages():删除所有短消息。\n - showMenu():显示操作菜单,根据用户输入执行相应操作。\n4. 在主函数中创建短消息链表对象,调用showMenu()方法显示操作菜单,根据用户选择调用相应方法。\n\nJava代码示例:\n\njava\npublic class Message {\n private String content;\n private long timestamp;\n\n public Message(String content, long timestamp) {\n this.content = content;\n this.timestamp = timestamp;\n }\n\n // 省略getter和setter方法\n}\n\npublic class MessageLinkedList {\n private Node head;\n private int length;\n\n private class Node {\n private Message message;\n private Node next;\n\n public Node(Message message) {\n this.message = message;\n this.next = null;\n }\n }\n\n public MessageLinkedList() {\n this.head = null;\n this.length = 0;\n }\n\n public void addMessage(Message message) {\n Node newNode = new Node(message);\n if (head == null) {\n head = newNode;\n } else {\n Node current = head;\n while (current.next != null) {\n current = current.next;\n }\n current.next = newNode;\n }\n length++;\n\n if (length > 20) {\n deleteEarliestMessage();\n }\n }\n\n public void displayMessages() {\n Node current = head;\n while (current != null) {\n System.out.println(current.message.getContent());\n current = current.next;\n }\n }\n\n public void readMessage(int index) {\n if (index < 0 || index >= length) {\n System.out.println("Invalid index");\n return;\n }\n\n Node current = head;\n for (int i = 0; i < index; i++) {\n current = current.next;\n }\n System.out.println(current.message.getContent());\n }\n\n public void deleteMessage(int index) {\n if (index < 0 || index >= length) {\n System.out.println("Invalid index");\n return;\n }\n\n if (index == 0) {\n head = head.next;\n } else {\n Node current = head;\n for (int i = 0; i < index - 1; i++) {\n current = current.next;\n }\n current.next = current.next.next;\n }\n length--;\n }\n\n public void deleteAllMessages() {\n head = null;\n length = 0;\n }\n\n public void showMenu() {\n Scanner scanner = new Scanner(System.in);\n boolean exit = false;\n while (!exit) {\n System.out.println("1. Add message");\n System.out.println("2. Display messages");\n System.out.println("3. Read message");\n System.out.println("4. Delete message");\n System.out.println("5. Delete all messages");\n System.out.println("6. Exit");\n System.out.print("Enter your choice: ");\n int choice = scanner.nextInt();\n switch (choice) {\n case 1:\n System.out.print("Enter message content: ");\n scanner.nextLine();\n String content = scanner.nextLine();\n long timestamp = System.currentTimeMillis();\n Message message = new Message(content, timestamp);\n addMessage(message);\n break;\n case 2:\n displayMessages();\n break;\n case 3:\n System.out.print("Enter message index: ");\n int index = scanner.nextInt();\n readMessage(index);\n break;\n case 4:\n System.out.print("Enter message index: ");\n int deleteIndex = scanner.nextInt();\n deleteMessage(deleteIndex);\n break;\n case 5:\n deleteAllMessages();\n break;\n case 6:\n exit = true;\n break;\n default:\n System.out.println("Invalid choice");\n break;\n }\n }\n scanner.close();\n }\n\n public static void main(String[] args) {\n MessageLinkedList messageList = new MessageLinkedList();\n messageList.showMenu();\n }\n}\n\n\n以上是一种解决该问题的思路、方法和流程,根据实际需求可以进行适当修改和调整。


原文地址: https://www.cveoy.top/t/topic/pvpU 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录