首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

午间写了个Queue

2013-09-28 
中午写了个Queue#pragma onceclass MyQueue{public:MyQueue()~MyQueue()void Insert(int aValue)int To

中午写了个Queue

#pragma once


class MyQueue
{
public:
MyQueue();
~MyQueue();
void Insert(int aValue);
int Top();
void Pop();
void PrintQueue();
void PrintHead();

private:
int GetIncreIndex(const int& aIndex);

private:
int* m_pData;
int m_Length;
int m_Count;
int m_Head;
int m_Tail;
};
#include "MyQueue.h"
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <stdlib.h> 

MyQueue::MyQueue( void )
:m_pData(NULL)
, m_Length(8)
, m_Head(0)
, m_Tail(0)
, m_Count(0)
{
m_pData = (int*)malloc(sizeof(int)*m_Length);
memset(m_pData,0,m_Length);
}

void MyQueue::Insert( int aValue )
{
m_pData[m_Tail] = aValue;
m_Tail = (m_Tail+1)%m_Length;
++m_Count;

if (m_Count == m_Length-1)
{
m_Length = m_Length << 2;
m_pData = (int*)realloc(m_pData,sizeof(int)*m_Length);
}
}

int MyQueue::Top()
{
return m_pData[m_Head];
}

void MyQueue::Pop()
{
if (m_Count == 0)
{
printf("NoData\n");
return;
}
m_Head = (m_Head+1)%m_Length;
--m_Count;
}

MyQueue::~MyQueue()
{
delete []m_pData;
}

void MyQueue::PrintQueue()
{
if (m_Count > 0)
{
int lTempIndex = m_Head;
do 
{
printf("%d ", m_pData[lTempIndex]);
lTempIndex = GetIncreIndex(lTempIndex);
} while (lTempIndex != m_Tail);
}

printf("\n");
}

int MyQueue::GetIncreIndex( const int& aIndex )
{
return (aIndex+1)%m_Length;
}

void MyQueue::PrintHead()
{
if (m_Count==0)
{
printf("NoData\n");
return;
}
printf("Head: %d\n",m_pData[m_Head]);
}



算法
[解决办法]
扩充数组之后,要把数组重新组织一下,不然尾在前,头在后,扩充后再添加就会把头覆盖掉。

热点排行