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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值