基本要求:
1) 建立顺序循环队列类SeqQueue。
2) 编写程序判断一个字符序列是否是回文。
提高要求:
1) 建立链式循环队列类LinQueue。
2) 编写程序判断一个字符序列是否是回文。
1.SeqQueue.h:顺序循环队列类的定义与实现
/*
* Copyright (c) 2009,FreshAir团队嵌入式软件研发组
* All rights reserved.
*
* 文件名称:SeqQueue.h
* 摘 要: 顺序循环队列类的定义与实现
*
* 当前版本:1.0
* 作 者: 吴友强
* 完成日期:2009年10月18日
*
* 取代版本:
* 原作者 :
* 完成日期:
*/
#include <iostream.h>
#include <stdlib.h>
const int MaxQueueSize = 100;
class SeqQueue
{
private:
DataType data[MaxQueueSize];
int front;
int rear;
int count;
public:
SeqQueue (void) // 构造函数,空队列
{
front = rear = 0;
count = 0;
};
~SeqQueue (void)
{}; //析构函数
void QueueInsert(const DataType& item); //入队列
DataType QueueDelete(void); //出队列
DataType QueueFrontData(void) const; //读队头元素值
int QueueIsEmpty(void) const //判队列是否为空
{
return front == rear ? 1 : 0;
};
void ClearSeqQueue(void) //清空队列
{
front = rear = 0;
count = 0;
};
int GetQueueSize(void) const //取队列元素个数
{
return count;
};
};
void SeqQueue::QueueInsert(const DataType& item)
{
if (front == MaxQueueSize)
{
cout << "队列已满" << endl;
exit(0);
}
data[rear] = item;
rear = (rear + 1) % MaxQueueSize;
count++;
}
DataType SeqQueue::QueueDelete(void) //出队列
{
DataType temp;
if (count == 0)
{
cout << "队列空!" << endl;
exit(0);
}
temp = data[front];
front = (front + 1)%MaxQueueSize;
count--;
return temp;
}
DataType SeqQueue::QueueFrontData(void) const //读队头元素值
{
if (count == 0)
{
cout << "队列空!" << endl;
exit(0);
}
return data[front];
}
2.SeqStackTest.cpp:测试顺序队列的功能,实现判断是否回文
/*
* Copyright (c) 2009,FreshAir团队嵌入式软件研发组
* All rights reserved.
*
* 文件名称:SeqStackTest.cpp
* 摘 要: 测试顺序队列的功能,实现判断是否回文
*
* 当前版本:1.0
* 作 者: 吴友强
* 完成日期:2009年10月18日
*
* 取代版本:
* 原作者 :
* 完成日期:
*/
#include <stdlib.h>
#include <iostream.h>
#include <string.h>
typedef char DataType;
#include "SeqQueue.h"
#include "SeqStack.h"
int main(void)
{
SeqStack myStack;
SeqQueue myQueue;
char str[80];
cout << "输入字符序列,回车换行符结束:" << endl;
cin.getline(str, 80);
int h = strlen(str);
for (int i=0; i<h; i++)
{
myQueue.QueueInsert(str[i]);
myStack.Push(str[i]);
}
while (!myQueue.QueueIsEmpty())
{
if (myQueue.QueueDelete() != myStack.Pop())
{
cout << "不是回文" << endl;
return 0;
}
}
cout << "是回文" << endl;
return 0;
}
说明:用到的堆栈头文件是前面实现的。