数据结构---栈-链表模型

        栈-链表模型的代码和上一篇队列的链表写法差不多,这里采用C++的方式写,使用类模板,使得栈中的数据类型可以自定义。

模型如下:

list_stack.cpp

#include <iostream>
#include "list_stack.h"

using namespace std;

template<class T> listStack<T>::listStack()
{
	count = 0;
	head = new _liststackNode;
	head->next = NULL;
}

template<class T> listStack<T>::~listStack()
{
	_liststackNode *ptr = NULL;
	_liststackNode *ptmp = NULL;
	ptr = head;
	while (ptr->next != NULL) {
		ptmp = ptr->next;
		ptr->next = ptmp->next;
		delete ptmp;
	}

	delete head;
	head = NULL;
	count = 0;
}

template<class T> void listStack<T>::push(const T &data)
{
	if(head == NULL) {
		return ;
	}
	_liststackNode *ptmp = new _liststackNode;
	ptmp->data = data;
	ptmp->next = NULL;

	ptmp->next = head->next;
	head->next = ptmp;

	count++;
	cout << "push data : " << head->next->data << endl;
}

template<class T> T listStack<T>::peek()
{
	if(head->next == NULL) {
		cout << "stack is empty" << endl;
		return -1;
	}

	return head->next->data;
}

template<class T> T listStack<T>::pop()
{	
	if(head->next == NULL) {
		cout << "stack is empty" << endl;
		return -1;
	}
	T dat;

	_liststackNode *ptmp = NULL;
	ptmp = head->next;
	head->next = ptmp->next;
	dat = ptmp->data;
	delete ptmp;
	count --;
	return dat;
}

template<class T> int listStack<T>::getSize() const {
	return  this -> count;

}

int main(int argc, char const *argv[])
{
    cout << " === StackBasedOnLinkedList test begin ===" << endl;
    listStack <float> stack;
    cout << "size==="<<stack.getSize()<<endl;
    stack.push(10.1);
    stack.push(20.2);
    stack.push(30.3);
    stack.push(40.4);
    stack.push(50.5);
    stack.push(60.6);
    cout << "size==="<<stack.getSize()<<endl;
    cout << "stack peek  " << stack.peek() << endl;
    cout << "stack pop  " << stack.pop() << endl;
    cout << "size==="<<stack.getSize()<<endl;
    cout << "stack pop  " << stack.pop() << endl;
    cout << "stack pop  " << stack.pop() << endl;
    cout << "stack pop  " << stack.pop() << endl;
    cout << "stack pop  " << stack.pop() << endl;
    cout << "stack pop  " << stack.pop() << endl;
    cout << "size==="<<stack.getSize()<<endl;
    cout << "stack pop  " << stack.pop() << endl;
    cout << "stack peek  " << stack.peek() << endl;
    return 0;
}

list_stack.h

#ifndef LISTSTACK_H_
#define LISTSTACK_H_

template<class T> class listStack {
public:
	listStack();
	~listStack();

	void push(const T & data);
	T peek();
	T pop();
	int  getSize() const;
private:
	int count;

	struct _liststackNode {
		T data;
		_liststackNode *next; //C++ 中struct 关键字可以省略
	};

	_liststackNode *head;
};

#endif

 

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值