`
thecloud
  • 浏览: 871935 次
文章分类
社区版块
存档分类
最新评论

数据结构学习记录连载9(队列的学习)

 
阅读更多

基本要求:

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;

intrear;
intcount;
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;
}

说明:用到的堆栈头文件是前面实现的。

<!--EndFragment-->
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics