SqStack.h(栈的顺序存储)
#pragma once
#include "stdafx.h"
#include <iostream>
using namespace std;
#define MAX_LEN 20
template<typename T>
class CSqStack
{
public:
CSqStack(void);
~CSqStack(void);
public:
bool pop(T& elemet);
bool push(T element);
void show();
private:
struct SData
{
T m_data[MAX_LEN];
int m_top;
};
SData* m_pStack;
};
template<typename T>
CSqStack<T>::CSqStack(void)
{
m_pStack = new SData;
m_pStack->m_top = -1;
}
template<typename T>
CSqStack<T>::~CSqStack(void)
{
}
template<typename T>
bool CSqStack<T>::pop(T& elemet)
{
if(m_pStack->m_top == -1)
{
return false;
}
elemet = m_pStack->m_data[m_pStack->m_top];
m_pStack->m_top--;
return true;
}
template<typename T>
bool CSqStack<T>::push(T element)
{
if(m_pStack->m_top == MAX_LEN-1)
{
return false;
}
m_pStack->m_top++;
m_pStack->m_data[m_pStack->m_top] = element;
return true;
}
template<typename T>
void CSqStack<T>::show()
{
if(m_pStack->m_top == -1)
{
return;
}
int top = m_pStack->m_top;
while(top != -1)
{
cout<<m_pStack->m_data[top]<<" ";
top--;
}
cout<<endl;
}
listStack.h(栈的链式存储)
#pragma once
#include "stdafx.h"
#include <iostream>
using namespace std;
template<typename T>
class CListStack
{
public:
CListStack(void);
~CListStack(void);
public:
bool pop(T& element);
bool push(T element);
void show();
private:
struct SNode
{
struct SNode* next;
T data;
};
struct Stack
{
SNode* top;
int count;
};
Stack* m_pStack;
};
template<typename T>
CListStack<T>::CListStack(void)
{
m_pStack = new Stack;
m_pStack->count= 0;
m_pStack->top = NULL;
}
template<typename T>
CListStack<T>::~CListStack(void)
{
}
template<typename T>
bool CListStack<T>::pop(T& element)
{
if(m_pStack->count ==0 )
{
return false;
}
SNode* p = m_pStack->top;
element = p->data;
SNode* q = p->next;
m_pStack->top = q;
m_pStack->count--;
return true;
}
template<typename T>
bool CListStack<T>::push(T element)
{
SNode* node = new SNode;
node->data = element;
node->next = m_pStack->top;
m_pStack->top = node;
m_pStack->count++;
return true;
}
template<typename T>
void CListStack<T>::show()
{
if(m_pStack->count == 0)
{
return;
}
SNode* p = m_pStack->top;
int count = m_pStack->count;
while (p && (count != 0))
{
cout<<p->data<<" ";
p = p->next;
count --;
}
}
main.cpp
// dataStruct_Test.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "SqStack.h"
#include "ListStack.h"
int _tmain(int argc, _TCHAR* argv[])
{
CSqStack<int> sqStack;
sqStack.push(1);
sqStack.push(2);
sqStack.push(3);
sqStack.show();
int val=0;
sqStack.pop(val);
cout<<val<<endl;
cout<<"__________________________________"<<endl;
CListStack<int> listStack;
listStack.push(1);
listStack.push(2);
listStack.push(3);
listStack.pop(val);
cout<<val<<endl;
listStack.show();
system("pause");
return 0;
}