用c++编写一个程序,队头为删除,队尾为插入元素,判断字符串是否为回文字符数组
时间: 2024-10-19 12:08:12 浏览: 29
在C++中,我们可以创建一个双向链表作为队列的数据结构,用于存储字符串,同时维护两个指针,一个指向队首(head),一个指向队尾(tail)。对于回文字符串数组的检查,我们需要遍历一半的数组,并比较对应的前后字符是否相等。
下面是一个简单的示例:
```cpp
#include <iostream>
#include <string>
#include <stack>
class Node {
public:
std::string str;
Node* next;
Node* prev;
};
class Queue {
private:
Node* head; // 队头
Node* tail; // 队尾
public:
void enqueue(const std::string& s) {
Node* newNode = new Node();
newNode->str = s;
newNode->next = nullptr;
if (!head)
head = tail = newNode;
else {
tail->next = newNode;
newNode->prev = tail;
tail = newNode;
}
}
bool isPalindrome() {
if (!head || !head->next) return true; // 空队列或只有一个元素都是回文
Node* slow = head;
Node* fast = head->next;
while (fast && fast->next != nullptr) { // 比较到队尾
if (slow->str != fast->str) return false;
slow = slow->next;
fast = fast->next->next;
}
return slow->str == fast->str;
}
~Queue() {
while (head) {
Node* temp = head;
head = head->next;
delete temp;
}
}
};
int main() {
Queue q;
q.enqueue("madam");
q.enqueue("level");
q.enqueue("hello");
if (q.isPalindrome()) {
std::cout << "给定的字符串数组是回文的。\n";
} else {
std::cout << "给定的字符串数组不是回文的。\n";
}
return 0;
}
```
在这个程序中,`enqueue`函数用于添加元素,`isPalindrome`函数则利用快慢指针检查队列是否为回文。当数组完全相等时,我们可以说它是回文的。
阅读全文