自己写的一个简单的队列类
2012-07-05 14:10
411 查看
1 #pragma once
3 #include<stdio.h>
4 #include<stdlib.h>
5 #include<iostream>
6
7 class CStack
8 {
9 public:
10 CStack();
11 ~CStack();
12 public:
13 typedef struct QUEUE
14 {
15 int nHead; //队头
16 int nTail; //队尾
17 double* dbData; //数据
18 };
19
20 QUEUE m_queue;
21
22 int m_nQueueSize;
23
24 public:
25 bool SetFree();
26 bool SetArraySize(int nSize);
27 bool PutValue(double dbValue);
28 bool PopValue();
29 bool IsEmpty();
30 bool IsFull();
31
32 int Size();
33
34 double GetValue(int nPos);
35 };
//实现文件
#include "stack.h"
CStack::CStack()
{
m_queue.nHead = 0;
m_queue.nTail = -1;
}
CStack::~CStack()
{
}
bool CStack::SetFree()
{
if(IsEmpty())
{
AfxMessageBox(_T("队列已空!"));
return false;
}
else
{
m_queue.nHead = 0;
m_queue.nTail = -1;
delete m_queue.dbData;
}
return true;
}
bool CStack::SetArraySize(int nSize)
{
m_queue.nHead = 0;
m_queue.nTail = -1;
m_queue.dbData = new double[nSize];
m_nQueueSize = nSize;
return true;
}
bool CStack::PutValue(double dbValue)
{
if(IsFull())
{
for(int i = 0; i < m_nQueueSize -1; i++)
{
m_queue.dbData[i +1] = m_queue.dbData[i];
}
m_queue.dbData[0] = dbValue;
}
else if(IsEmpty())
{
m_queue.nTail++;
m_queue.dbData[0] = dbValue;
}
else
{
m_queue.nHead++;
m_queue.dbData[m_queue.nHead] = dbValue;
}
return true;
}
bool CStack::PopValue()
{
if(IsEmpty())
{
AfxMessageBox(_T("队列已经为空!"));
return false;
}
else
{
m_queue.dbData[m_queue.nHead] = 0;
m_queue.nHead--;
}
return true;
}
bool CStack::IsEmpty()
{
if(m_queue.nTail == -1)
return true;
else
return false;
}
bool CStack::IsFull()
{
if(m_queue.nHead - m_queue.nTail >= m_nQueueSize - 1)
return true;
else
return false;
}
double CStack::GetValue(int nPos)
{
if(nPos > m_nQueueSize - 1)
{
AfxMessageBox(_T("越界!"));
return -1;
}
double dbValue = m_queue.dbData[nPos];
return dbValue;
}
int CStack::Size()
{
if(IsEmpty())
return 0;
int nSize = m_queue.nHead - m_queue.nTail +1;
return nSize;
}
3 #include<stdio.h>
4 #include<stdlib.h>
5 #include<iostream>
6
7 class CStack
8 {
9 public:
10 CStack();
11 ~CStack();
12 public:
13 typedef struct QUEUE
14 {
15 int nHead; //队头
16 int nTail; //队尾
17 double* dbData; //数据
18 };
19
20 QUEUE m_queue;
21
22 int m_nQueueSize;
23
24 public:
25 bool SetFree();
26 bool SetArraySize(int nSize);
27 bool PutValue(double dbValue);
28 bool PopValue();
29 bool IsEmpty();
30 bool IsFull();
31
32 int Size();
33
34 double GetValue(int nPos);
35 };
//实现文件
#include "stack.h"
CStack::CStack()
{
m_queue.nHead = 0;
m_queue.nTail = -1;
}
CStack::~CStack()
{
}
bool CStack::SetFree()
{
if(IsEmpty())
{
AfxMessageBox(_T("队列已空!"));
return false;
}
else
{
m_queue.nHead = 0;
m_queue.nTail = -1;
delete m_queue.dbData;
}
return true;
}
bool CStack::SetArraySize(int nSize)
{
m_queue.nHead = 0;
m_queue.nTail = -1;
m_queue.dbData = new double[nSize];
m_nQueueSize = nSize;
return true;
}
bool CStack::PutValue(double dbValue)
{
if(IsFull())
{
for(int i = 0; i < m_nQueueSize -1; i++)
{
m_queue.dbData[i +1] = m_queue.dbData[i];
}
m_queue.dbData[0] = dbValue;
}
else if(IsEmpty())
{
m_queue.nTail++;
m_queue.dbData[0] = dbValue;
}
else
{
m_queue.nHead++;
m_queue.dbData[m_queue.nHead] = dbValue;
}
return true;
}
bool CStack::PopValue()
{
if(IsEmpty())
{
AfxMessageBox(_T("队列已经为空!"));
return false;
}
else
{
m_queue.dbData[m_queue.nHead] = 0;
m_queue.nHead--;
}
return true;
}
bool CStack::IsEmpty()
{
if(m_queue.nTail == -1)
return true;
else
return false;
}
bool CStack::IsFull()
{
if(m_queue.nHead - m_queue.nTail >= m_nQueueSize - 1)
return true;
else
return false;
}
double CStack::GetValue(int nPos)
{
if(nPos > m_nQueueSize - 1)
{
AfxMessageBox(_T("越界!"));
return -1;
}
double dbValue = m_queue.dbData[nPos];
return dbValue;
}
int CStack::Size()
{
if(IsEmpty())
return 0;
int nSize = m_queue.nHead - m_queue.nTail +1;
return nSize;
}
相关文章推荐
- 自己实现一个简单的优先队列-二叉堆
- 在自己的WSASOCKET服务端/客户端中做了一个简单的解包程序处理粘包的问题
- 自己编写一个简单的ActiveX控件——详尽教程
- 自己第一次写触发器(oracle)-一个简单的触发器
- 自己动手,写一个简单的线程池(2)
- 备忘:一个自己写过的简单的EXCEL VBA程序
- 咱们在讨论的时候能不能先确定一个明确的范围呢?最好能把自己的经历简单说一下。
- 关于自己臆想的一个简单的玩具代码
- 请实现一个队列,既可以存放整数,又可以存放字符串。简单的说,队列是一种数据结构,按照先进先出的顺序管理进、出队列的元素
- 自己用纯C写的一个简单的表达式科学计算器,欢迎大家观阅。
- 分享一个小巧简单的基金查询工具(自己写的)
- [置顶] 一个简单的JAVA字符集过滤器实现 -vb2005xu 自己动手
- 自己写的一个java采集有关的简单类
- 分布式消息队列RocketMQ&Kafka -- 消息的“顺序消费”-- 一个看似简单的复杂问题
- 自己写一个简单的LinkedList
- 模仿Hibernate自己写的一个简单MyHibernate
- 自己实现一个栈(Stack)和队列(Queue)
- 分享自己做的一个简单的查询表达式模拟(ESQL,Linq)(2)
- 分布式消息队列RocketMQ&Kafka -- 消息的“顺序消费”-- 一个看似简单的复杂问题
- [原创][Java]一个简单高效的线程安全队列的JAVA实现