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

来源:互联网 发布:局域网团队协作软件 编辑:程序博客网 时间:2024/05/24 01:00

基本要求:

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

 

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

原创粉丝点击