堆栈和队列,以测试回文

时间:2015-04-21 03:24:49

标签: c++ linked-list palindrome

我制作了一个自定义的Stack and Queue类。在我的程序中,我想用它们来测试单词或短语是否是回文结构。但是,我需要更改我的Stack和Queue类,这将允许数字和字符串。我将如何以简单的方式解决这个问题?我读到了使用Palindromes时遇到问题的人,但这与C ++参考类有关。有任何想法吗?这是我的代码,它与数字一起使用。

//Queue.h

#include <iostream>
using namespace std;

class Queue
{
public:
    Queue();
    ~Queue();
    void enqueue(int);
    int dequeue();
    void print();
private:
    typedef struct Node {
        Node *link_;
        int item_;
    } NODE;
    NODE* head_;
};

Queue::Queue()
{
    head_ = NULL;
}

Queue::~Queue()
{
    if (head_ == NULL) return;
    NODE *cur = head_;
    while (cur) {
        Node *ptr = cur;
        cur = cur->link_;
        delete ptr;
    }
}

void Queue::enqueue(int n)
{
    if (head_ == NULL) {
        head_ = new NODE;
        head_->item_ = n;
        head_->link_ = NULL;
        return;
    }
    NODE *cur = head_;
    while (cur) {
        if (cur->link_ == NULL) {
            NODE *ptr = new NODE;
            ptr->item_ = n;
            ptr->link_ = NULL;
            cur->link_ = ptr;
            return;
        }
        cur = cur->link_;
    }
}

void Queue::print()
{
    if (head_ == NULL) return;
    Node *cur = head_;
    cout << "This is your current queue: " << endl;
    while (cur) {
        cout << cur->item_ << " ";
        cur = cur->link_;
    }
    cout << endl;
}

int Queue::dequeue()
{
    if (head_ == NULL) {
        cout << "This is an empty queue!!" << endl;
        return NULL;
    }
    NODE *tmp = head_;
    int value = head_->item_;
    if (head_->link_) {
        head_ = head_->link_;
    }
    // pop the last element (head)
    else {
        delete tmp;
        head_ = NULL;
    }
    cout << "You dequeued: " << value << endl;;
    return value;
}

int getQueue()
{
    Queue *que = new Queue();
    que->enqueue(15);
    que->enqueue(75);
    que->enqueue(105);
    que->enqueue(25);
    que->enqueue(55);
    que->print();
    que->dequeue(); que->print();
    que->dequeue(); que->print();
    que->dequeue(); que->print();
    que->dequeue(); que->print();
    que->dequeue(); que->print();
    que->dequeue(); que->print();
    return 0;
}

我真的很喜欢编写C ++并且真的想学习。如果有人能帮助我,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

执行此操作的最佳方法是使您的队列类型模板化

template <typename T> class Queue
{
public:
    Queue();
    ~Queue();
    void enqueue(const T &value);
    T dequeue();
    void print();
private:
    typedef struct Node {
        Node *link_;
        T item_;
    } NODE;
    NODE* head_;
};

现在您可以将其用作

Queue<int> intQueue;
intQueue.enqueue(1);
intQueue.enqueue(2);
int i = intQueue.dequeue();

Queue<string> stringQueue;
stringQueue.enqueue("hello");

Queue<char>  charQueue;
charQueue.enqueue('c');