1.QueueNode.h:链式队列结点类定义
/*
* Copyright (c) 2009,FreshAir团队嵌入式软件研发组
* All rights reserved.
*
* 文件名称:QueueNode.h
* 摘 要:链式队列结点类定义
*
* 当前版本:1.0
* 作 者:吴友强
* 完成日期:2009年10月19日
*
* 取代版本:
* 原作者 :
* 完成日期:
*/
#include <iostream.h>
#include <stdlib.h>
template <class T> class LinkQueue;
template <class T>
class QueueNode
{
friend class LinkQueue<T>;
private:
QueueNode<T> *next;
public:
T data;
//构造函数
QueueNode(const T& item, QueueNode<T> *ptrNext = NULL)
{
data =item;
next = ptrNext;
}
~QueueNode() {};
};
2.LinkQueue.h:链式队列模板类的定义与接口实现
/*
* Copyright (c) 2009,FreshAir团队嵌入式软件研发组
* All rights reserved.
*
* 文件名称:LinkQueue.h
* 摘 要:链式队列模板类的定义与接口实现
*
* 当前版本:1.0
* 作 者:吴友强
* 完成日期:2009年10月19日
*
* 取代版本:
* 原作者 :
* 完成日期:
*/
#include "QueueNode.h"
template <class T>
class LinkQueue
{
private:
QueueNode<T> *front;
QueueNode<T> *rear;
int size;
public:
LinkQueue(void);
~LinkQueue(void);
void QueueInsert(const T& item);
T QueueDelete(void);
T QueueFront(void) const;
int QueueIsEmpty(void) const
{
return size <= 0;
}
void ClearQueue(void);
int GetQueueSize(void) const
{
return size;
}
};
template <class T>
LinkQueue<T>::LinkQueue()
{
front = rear = NULL;
size = 0;
}
template <class T>
LinkQueue<T>::~LinkQueue()
{
ClearQueue();
front = rear = NULL;
}
/*
* 函数名称: QueueInsert
* 输 入:item
*item:需要插入的数据
* 输 出:
* 功能描述: 将item插入到队列中
* 作 者:吴友强
* 日 期:2009年10月19日
* 修 改:
* 日 期:
*/
template <class T>
void LinkQueue<T>::QueueInsert(const T& item)
{
QueueNode<T> *newNode = new QueueNode<T>(item, NULL);
if (rear != NULL)//原先不为空链时才要连接
{
rear->next = newNode;
}
rear = newNode;//新结点为队尾结点
if (front == NULL)
{
front = newNode;//原先为空链时给front赋值
}
size++;
}
/*
* 函数名称: QueueDelete
* 输 入:
* 输 出:
* 功能描述: 删除队列头部的一个数据
* 作 者:吴友强
* 日 期:2009年10月19日
* 修 改:
* 日 期:
*/
template <class T>
T LinkQueue<T>::QueueDelete()
{
if (size == 0)
{
cout << "队列以空无元素可删!" << endl;
exit(0);
}
QueueNode<T> *p = front->next;
T data = front->data;
delete front;
front = p;
size--;
return data;
}
/*
* 函数名称: QueueFront
* 输 入:
* 输 出:
* 功能描述: 访问队列头部的一个数据
* 作 者:吴友强
* 日 期:2009年10月19日
* 修 改:
* 日 期:
*/
template <class T>
T LinkQueue<T>::QueueFront() const
{
return front->data;
}
/*
* 函数名称: ClearQueue
* 输 入:
* 输 出:
* 功能描述: 清空队列
* 作 者:吴友强
* 日 期:2009年10月19日
* 修 改:
* 日 期:
*/
template <class T>
void LinkQueue<T>::ClearQueue()
{
QueueNode<T> *p, *q;
p = front;
while (p != NULL)
{
q = p;
p = p->next;
delete q;
}
size = 0;
}
3.LinkQueueTest.cpp:用链式堆栈和队列实现回文判断
/*
* Copyright (c) 2009,FreshAir团队嵌入式软件研发组
* All rights reserved.
*
* 文件名称:LinkQueueTest.cpp
* 摘 要:用链式堆栈和队列实现回文判断
*
* 当前版本:1.0
* 作 者:吴友强
* 完成日期:2009年10月19日
*
* 取代版本:
* 原作者 :
* 完成日期:
*/
#include <iostream.h>
#include <stdlib.h>
#include <string.h>
#include "LinkQueue.h"
#include "LinkStack.h"
void main(void)
{
LinkStack<char> myStack;
LinkQueue<char> myQueue;
char str[80];
cout << "输入字符序列,回车换行结束:" << endl;
cin.getline(str, 80);
int h = strlen(str);
cout << "h = " << h << endl;
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 ;
}
}
cout << "是回文!" << endl;
}
分享到:
相关推荐
数据结构中队列的具体实现,给出了代码,可以加强对队列这一数据结构的理解和应用。希望大家下载后自己实现一下,得出正确的结果,真正的理解这一结构的思想。数据结构中队列的具体实现,给出了代码,可以加强对队列...
数据结构中关于队列的实现代码,数据结构中关于队列的实现代码,
PPT内容是数据结构中有关栈和队列的知识,非常适合正在学习数据结构基础的同学
数据结构 严蔚敏 C语言版 循环队列 很给劲哦 绝对不会令您失望的。
c语言数据结构的队列实现,新建队列,入队列,出队列,删除队列
C# 数据结构实现队列,解决银行排队问题
简单的数据结构单链队列的VC实现 仅供学习研究使用
数据结构课件及课堂笔记 栈和队列 计算机类
数据结构与算法中队列的实现,游玩不得代码哦!
数据结构中队列的操作很重要,这是本人用C语言编写的程序绝对原创!不能说经典但很实用!!
队列,数据结构,c++,实现,自创,完全版
熟悉队列的定义,队列的特点以及队列的基本操作。能够根据实际情况选择合适的存储结构,解决实际问题。 2.实验内容: 利用循环队列模拟舞伴配对问题: 1、利用循环队列模拟舞伴配对问题。在舞会上,男、女各自排成...
根据栈和队列的抽象数据类型的定义,按要求实现一个栈或一个队列。 要求: 1、 实现一个共享栈 2、 实现一个链栈 3、 实现一个循环队列 4、 实现一个链队列
主要介绍了C++数据结构与算法之双缓存队列实现方法,结合实例形式分析了双缓存队列的原理、实现方法与相关注意事项,需要的朋友可以参考下
数据结构-实验4-循环队列的实现和运算.docx数据结构-实验4-循环队列的实现和运算.docx数据结构-实验4-循环队列的实现和运算.docx数据结构-实验4-循环队列的实现和运算.docx数据结构-实验4-循环队列的实现和运算.docx...
数据结构 严蔚敏 C语言版 链队列表示与实现 很给劲哦 绝对不会令您失望的。
队列实现,数据结构作业练习参考,Java实现,环境eclipes1.8
数据结构中,关于循环队列的实践操作,用c++程序实现 适用于初学者
数据结构-实验4-循环队列的实现和运算.doc