数据结构——队列篇
2016-08-29 17:45
120 查看
数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。
什么是队列?
是一种先入先出的模型。FIFO:first in first out
队列形式:普通队列、环形队列
普通队列
![](https://img-blog.csdn.net/20160829174520089?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
已买票形式进项说明;
一种情况第一个位置买完离开、后面的人依次往前。 效率低
第二种售票人往后依次买票。 内存浪费
环形队列:
![](https://img-blog.csdn.net/20160829174922124?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
屏蔽了普通队列的缺点,但很难理解
可以顺时针、逆时针排队,使用环形队列可以充分利用内存空间的、因为使用完一个队列头,接下来的的队列尾就可以继续使用。
队列的用途:排号机,
实际应用,左边是c++,右边是c
![](https://img-blog.csdn.net/20160830091005391?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
MyQueue.h
#ifndef MyQueue_H
#define MyQueue_H
#include "Customer.h"
class MyQueue
{
public:
MyQueue (int quequeCapacity);
virtual ~MyQueue ();
void ClearQueue ();
bool QueueEmpty ()const;
bool QueueFull ()const;
int QueueLength () const;
bool EnQueue (Customer element);
bool DeQueue (Customer &element);
void QueueTraverse ();
private:
int *m_pQueue; //可以是自己定的类别 ,比如Customer *m_pQueue;
int m_iQueuelen;
int m_QueueCapacity;
int m_iHead;
int m_iTail;
};
#endif;
MyQueue.cpp
#include <iostream>
using namespace std;
#include "MyQueue.h"
MyQueue::MyQueue (int quequeCapacity)
{
m_QueueCapacity = quequeCapacity;
m_iHead = 0;
m_iTail = 0;
m_iQueuelen = 0;
m_pQueue = new int[m_QueueCapacity]; //m_pQueue = new Customer[m_QueueCapacity];
ClearQueue ();
}
MyQueue::~MyQueue ()
{
delete[]m_pQueue;
m_pQueue = NULL;
}
void MyQueue::ClearQueue ()
{
m_iHead = 0;
m_iTail = 0;
m_iQueuelen = 0;
}
bool MyQueue::QueueEmpty ()const
{
if ( m_iQueuelen == 0 )
{
return true;
}
else
{
return false;
}
}
int MyQueue::QueueLength () const
{
return m_iQueuelen;
}
bool MyQueue::QueueFull ()const
{
if ( m_iQueuelen == m_QueueCapacity )
{
return true;
}
return false;
}
bool MyQueue::EnQueue (int element) //bool MyQueue::EnQueue (Customer element)
{
if ( QueueFull () )
{
return false;
}
else
{
m_pQueue[m_iTail] = ele
4000
ment;
m_iTail++;
m_iTail = m_iTail% m_QueueCapacity;
m_iQueuelen++;
return true;
}
}
bool MyQueue::DeQueue (int &element) //bool MyQueue::DeQueue (Customer &element)
{
if ( QueueEmpty () )
{
return false;
}
element = m_pQueue[m_iHead];
m_iHead++;
m_iHead = m_iHead% m_QueueCapacity;
m_iQueuelen--;
return true;
}
void MyQueue::QueueTraverse ()
{
for ( int i = m_iHead; i < m_iQueuelen + m_iHead; i++ )
{
cout<<m_pQueue[i% m_QueueCapacity].<<endl;
}
}
demo.cpp
#include <iostream>
using namespace std;
#include "MyQueue.h"
#include "Customer.h"
int main (void)
{
MyQueue*p = new MyQueue (4);
p->EnQueue (10);
p->EnQueue (12);
p->EnQueue (14);
p->EnQueue (16);
p->EnQueue (10); //这个不会成功一共四个
p->QueueTraverse ();
int e = 0;
p->DeQueue (e);
cout << endl;
cout << e << endl;
p->DeQueue (e);
cout << endl;
cout << e << endl;
cout << endl;
p->QueueTraverse ();
p->ClearQueue ();
//p->QueueTraverse ();
delete p;
p = NULL;
system ("pause");
什么是队列?
是一种先入先出的模型。FIFO:first in first out
队列形式:普通队列、环形队列
普通队列
已买票形式进项说明;
一种情况第一个位置买完离开、后面的人依次往前。 效率低
第二种售票人往后依次买票。 内存浪费
环形队列:
屏蔽了普通队列的缺点,但很难理解
可以顺时针、逆时针排队,使用环形队列可以充分利用内存空间的、因为使用完一个队列头,接下来的的队列尾就可以继续使用。
队列的用途:排号机,
实际应用,左边是c++,右边是c
MyQueue.h
#ifndef MyQueue_H
#define MyQueue_H
#include "Customer.h"
class MyQueue
{
public:
MyQueue (int quequeCapacity);
virtual ~MyQueue ();
void ClearQueue ();
bool QueueEmpty ()const;
bool QueueFull ()const;
int QueueLength () const;
bool EnQueue (Customer element);
bool DeQueue (Customer &element);
void QueueTraverse ();
private:
int *m_pQueue; //可以是自己定的类别 ,比如Customer *m_pQueue;
int m_iQueuelen;
int m_QueueCapacity;
int m_iHead;
int m_iTail;
};
#endif;
MyQueue.cpp
#include <iostream>
using namespace std;
#include "MyQueue.h"
MyQueue::MyQueue (int quequeCapacity)
{
m_QueueCapacity = quequeCapacity;
m_iHead = 0;
m_iTail = 0;
m_iQueuelen = 0;
m_pQueue = new int[m_QueueCapacity]; //m_pQueue = new Customer[m_QueueCapacity];
ClearQueue ();
}
MyQueue::~MyQueue ()
{
delete[]m_pQueue;
m_pQueue = NULL;
}
void MyQueue::ClearQueue ()
{
m_iHead = 0;
m_iTail = 0;
m_iQueuelen = 0;
}
bool MyQueue::QueueEmpty ()const
{
if ( m_iQueuelen == 0 )
{
return true;
}
else
{
return false;
}
}
int MyQueue::QueueLength () const
{
return m_iQueuelen;
}
bool MyQueue::QueueFull ()const
{
if ( m_iQueuelen == m_QueueCapacity )
{
return true;
}
return false;
}
bool MyQueue::EnQueue (int element) //bool MyQueue::EnQueue (Customer element)
{
if ( QueueFull () )
{
return false;
}
else
{
m_pQueue[m_iTail] = ele
4000
ment;
m_iTail++;
m_iTail = m_iTail% m_QueueCapacity;
m_iQueuelen++;
return true;
}
}
bool MyQueue::DeQueue (int &element) //bool MyQueue::DeQueue (Customer &element)
{
if ( QueueEmpty () )
{
return false;
}
element = m_pQueue[m_iHead];
m_iHead++;
m_iHead = m_iHead% m_QueueCapacity;
m_iQueuelen--;
return true;
}
void MyQueue::QueueTraverse ()
{
for ( int i = m_iHead; i < m_iQueuelen + m_iHead; i++ )
{
cout<<m_pQueue[i% m_QueueCapacity].<<endl;
}
}
demo.cpp
#include <iostream>
using namespace std;
#include "MyQueue.h"
#include "Customer.h"
int main (void)
{
MyQueue*p = new MyQueue (4);
p->EnQueue (10);
p->EnQueue (12);
p->EnQueue (14);
p->EnQueue (16);
p->EnQueue (10); //这个不会成功一共四个
p->QueueTraverse ();
int e = 0;
p->DeQueue (e);
cout << endl;
cout << e << endl;
p->DeQueue (e);
cout << endl;
cout << e << endl;
cout << endl;
p->QueueTraverse ();
p->ClearQueue ();
//p->QueueTraverse ();
delete p;
p = NULL;
system ("pause");
相关文章推荐
- 数据结构——基本数据结构之队列
- 数据结构之顺序队列
- 【数据结构与算法基础】以数组实现的循环队列 / Circular Queue implemented by array
- 基础数据结构(栈,队列)
- [翻译]C#数据结构与算法 – 第五章栈与队列(Part 2)
- 数据结构之队列的实现(c语言)
- 数据结构:队列的实现
- 关于linux内核中 等待队列 数据结构之思考
- 关于linux内核中 等待队列 数据结构之思考
- 数据结构(三)——队列及实现、循环队列实现
- 数据结构:用队列模拟理发店的排队情况(C#)
- [翻译]C#数据结构与算法 – 第五章栈与队列(Part 1)
- 面向数据c++数据结构之基本数据结构(队列)--【美】Jan Harrington 陈博译
- 数据队列结构与操作
- [翻译]C#数据结构与算法 – 第五章栈与队列(Part 2)
- 数据结构之循环队列
- C#数据结构之队列
- 数据结构实现(队列类模板)
- 数据结构之表(7)队列的顺序实现
- 数据结构(五)——双链表、链式栈、链式队列 及实现