データ構造----チェーンスタック
2033 ワード
次のコードは、一方向チェーンを利用して、データ構造スタックを実現します.スタックの基本的な操作方法はそれぞれ実現されている.
1:スタック void push()
2: 倉庫から出す ブックpop()
3: スタックトップ要素ブックtop(int*value)を入手しました.
4: スタックが空のbook eptyかどうかを判断する()
5: スタックのサイズint size()を得る
6: 出力スタック内要素void output()
1:スタック void push()
2: 倉庫から出す ブックpop()
3: スタックトップ要素ブックtop(int*value)を入手しました.
4: スタックが空のbook eptyかどうかを判断する()
5: スタックのサイズint size()を得る
6: 出力スタック内要素void output()
#include "Stack.h"
// , ,
CStack::CStack(void)
{
m_value = 0xFFFFFFFF;
m_pnext = NULL;
}
CStack::~CStack(void)
{
printf("delete %d
", m_value);
}
void CStack::destroy()
{
CStack *pnode = this;
while(m_pnext != NULL)
{
CStack *ptemp = m_pnext;
m_pnext = m_pnext->m_pnext;
delete ptemp;
}
}
void CStack::push(int value)
{
CStack *newnode = new CStack;
newnode->m_value = value;
newnode->m_pnext = this->m_pnext;
this->m_pnext = newnode;
m_value++;
}
bool CStack::pop()
{
if (m_pnext == NULL)
{
return false;
}
else
{
m_pnext = m_pnext->m_pnext;
}
m_value--;
return true;
}
bool CStack::top(int *value)
{
if (m_pnext != NULL)
{
*value = m_pnext->m_value;
return true;
}
*value = 0xFFFFFFFF;
return false;
}
int CStack::size()
{
CStack *pnode = this;
int count = 0;
while(pnode->m_pnext != NULL)
{
count++;
pnode = pnode->m_pnext;
}
return count;
}
bool CStack::empty()
{
if (m_pnext == NULL)
{
return true;
}
return false;
}
void CStack::output()
{
CStack *pnode = this;
int count = 0;
while(pnode->m_pnext != NULL)
{
printf("index=%d value=%d
", count, pnode->m_pnext->m_value);
pnode = pnode->m_pnext;
}
}