数据结构学习记录连载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;
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;
}
说明:用到的堆栈头文件是前面实现的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架