C++实现队列

简介:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#ifndef __QUEUE__
#define __QUEUE__
 
class  CQueue
{
       int  * m_pData;
       int  m_nHead,m_nTail;
       int  m_nCount;
    public :
       CQueue( int  nCount=10);
 
       bool  isEmpty();
       bool  isFull();
 
       void  push( const  int  & v);
       bool  pop( int  &v);
};
 
CQueue::CQueue( int  nCount)
{
     m_pData =  new  int [nCount];
     m_nHead = m_nTail = 0;
     m_nCount = nCount;
}
 
void  CQueue::push( const  int  & value)
{
     if (!isFull())
     {
         m_pData[m_nTail++] = value;
         
         if (m_nTail >= m_nCount)
           m_nTail = 0;
     }
}
bool  CQueue::pop ( int  & value)
{
     if (isEmpty()) return  false ;
     value = m_pData[m_nHead++];
 
     if (m_nHead >= m_nCount)
        m_nHead = 0;
 
     return  true ;
}
 
bool  CQueue::isFull()
{
      return  ((m_nTail+1)%m_nCount == m_nHead);
}
bool  CQueue::isEmpty()
{
      return  m_nHead == m_nTail;
}
 
#endif

调用方法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
#include "queue.h"
using  namespace  std;
 
int  main( int  argc,  char * argv[])
{
      CQueue queue = 5;
 
      queue.push(2);
      queue.push(3);
      queue.push(4);
      queue.push(5);
      queue.push(6);
      queue.push(7);
      queue.push(8);
 
      int  c = 0;
      queue.pop(c);
      cout << c <<endl;
      queue.pop(c);
      cout << c <<endl;
      queue.pop(c);
      cout << c <<endl;
 
      queue.push(9);
      bool  re = queue.pop(c);
      cout << re << ":" << c <<endl;
      re = queue.pop(c);
      cout << re <<  ":" << c <<endl;
      re = queue.pop(c);
      cout << re << ":"  << c <<endl;
 
      getchar ();
}

模板化处理后,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#ifndef __QUEUE__
#define __QUEUE__
 
template < class  T>
class  CQueue
{
       T * m_pData;
       int  m_nHead,m_nTail;
       int  m_nCount;
    public :
       CQueue( int  nCount=10);
 
       bool  isEmpty();
       bool  isFull();
 
       void  push( const  T & v);
       bool  pop(T &v);
};
 
template < class  T>
CQueue<T>::CQueue( int  nCount)
{
     m_pData =  new  T[nCount];
     m_nHead = m_nTail = 0;
     m_nCount = nCount;
}
 
template < class  T>
void  CQueue<T>::push( const  T & value)
{
     if (!isFull())
     {
         m_pData[m_nTail++] = value;
         
         if (m_nTail >= m_nCount)
           m_nTail = 0;
     }
}
 
template < class  T>
bool  CQueue<T>::pop (T & ch)
{
     if (isEmpty()) return  false ;
     ch = m_pData[m_nHead++];
 
     if (m_nHead >= m_nCount)
        m_nHead = 0;
 
     return  true ;
}
 
template < class  T>
bool  CQueue<T>::isFull()
{
      return  ((m_nTail+1)%m_nCount == m_nHead);
}
 
template < class  T>
bool  CQueue<T>::isEmpty()
{
      return  m_nHead == m_nTail;
}
 
#endif











本文转自Chinayu201451CTO博客,原文链接:http://blog.51cto.com/9233403/1966588  ,如需转载请自行联系原作者


相关文章
|
存储 C语言 C++
【C++数据结构——栈与队列】顺序栈的基本运算(头歌实践教学平台习题)【合集】
本关任务:编写一个程序实现顺序栈的基本运算。开始你的任务吧,祝你成功!​ 相关知识 初始化栈 销毁栈 判断栈是否为空 进栈 出栈 取栈顶元素 1.初始化栈 概念:初始化栈是为栈的使用做准备,包括分配内存空间(如果是动态分配)和设置栈的初始状态。栈有顺序栈和链式栈两种常见形式。对于顺序栈,通常需要定义一个数组来存储栈元素,并设置一个变量来记录栈顶位置;对于链式栈,需要定义节点结构,包含数据域和指针域,同时初始化栈顶指针。 示例(顺序栈): 以下是一个简单的顺序栈初始化示例,假设用C语言实现,栈中存储
847 77
|
存储 C++ 索引
【C++数据结构——栈与队列】环形队列的基本运算(头歌实践教学平台习题)【合集】
【数据结构——栈与队列】环形队列的基本运算(头歌实践教学平台习题)【合集】初始化队列、销毁队列、判断队列是否为空、进队列、出队列等。本关任务:编写一个程序实现环形队列的基本运算。(6)出队列序列:yzopq2*(5)依次进队列元素:opq2*(6)出队列序列:bcdef。(2)依次进队列元素:abc。(5)依次进队列元素:def。(2)依次进队列元素:xyz。开始你的任务吧,祝你成功!(4)出队一个元素a。(4)出队一个元素x。
515 13
【C++数据结构——栈与队列】环形队列的基本运算(头歌实践教学平台习题)【合集】
|
存储 算法 C++
【c++丨STL】priority_queue(优先级队列)的使用与模拟实现
本文介绍了STL中的容器适配器`priority_queue`(优先级队列)。`priority_queue`根据严格的弱排序标准设计,确保其第一个元素始终是最大元素。它底层使用堆结构实现,支持大堆和小堆,默认为大堆。常用操作包括构造函数、`empty`、`size`、`top`、`push`、`pop`和`swap`等。我们还模拟实现了`priority_queue`,通过仿函数控制堆的类型,并调用封装容器的接口实现功能。最后,感谢大家的支持与关注。
875 1
|
存储 C语言 C++
【C++数据结构——栈与队列】链栈的基本运算(头歌实践教学平台习题)【合集】
本关任务:编写一个程序实现链栈的基本运算。开始你的任务吧,祝你成功!​ 相关知识 初始化栈 销毁栈 判断栈是否为空 进栈 出栈 取栈顶元素 初始化栈 概念:初始化栈是为栈的使用做准备,包括分配内存空间(如果是动态分配)和设置栈的初始状态。栈有顺序栈和链式栈两种常见形式。对于顺序栈,通常需要定义一个数组来存储栈元素,并设置一个变量来记录栈顶位置;对于链式栈,需要定义节点结构,包含数据域和指针域,同时初始化栈顶指针。 示例(顺序栈): 以下是一个简单的顺序栈初始化示例,假设用C语言实现,栈中存储整数,最大
309 9
|
C++
【C++数据结构——栈和队列】括号配对(头歌实践教学平台习题)【合集】
【数据结构——栈和队列】括号配对(头歌实践教学平台习题)【合集】(1)遇到左括号:进栈Push()(2)遇到右括号:若栈顶元素为左括号,则出栈Pop();否则返回false。(3)当遍历表达式结束,且栈为空时,则返回true,否则返回false。本关任务:编写一个程序利用栈判断左、右圆括号是否配对。为了完成本关任务,你需要掌握:栈对括号的处理。(1)遇到左括号:进栈Push()开始你的任务吧,祝你成功!测试输入:(()))
419 7
|
缓存 安全 C++
C++无锁队列:解锁多线程编程新境界
【10月更文挑战第27天】
1100 7
|
消息中间件 存储 安全
|
存储 设计模式 C++
【C++】优先级队列(容器适配器)
本文介绍了C++ STL中的线性容器及其适配器,包括栈、队列和优先队列的设计与实现。详细解析了`deque`的特点和存储结构,以及如何利用`deque`实现栈、队列和优先队列。通过自定义命名空间和类模板,展示了如何模拟实现这些容器适配器,重点讲解了优先队列的内部机制,如堆的构建与维护方法。
230 0
|
存储 设计模式 算法
【C++】deque以及优先级队列
【C++】deque以及优先级队列
|
存储 算法 C语言
【C++】详解STL的适配器容器之一:优先级队列 priority_queue
【C++】详解STL的适配器容器之一:优先级队列 priority_queue