头文件
/**
* 书本:【ThinkingInC++】
* 功能:带有构造函数和析构函数的Stack
* 时间:2014年8月27日11:13:10
* 作者:cutter_point
*/
#ifndef STACK3_H_INCLUDED
#define STACK3_H_INCLUDED
class Stack
{
struct Link
{
void* data;
Link* next;
Link(void* dat, Link* nxt);
~Link();
}*head;
public:
Stack();
~Stack();
void push(void* dat); //压入一个数据
void* peek(); //返回栈的顶元素但是在栈中不删除元素
void* pop(); //返回栈顶元素,并且从栈中删除这个元素
};
#endif // STACK3_H_INCLUDED
定义文件
/**
* 书本:【ThinkingInC++】
* 功能:关于Stack的够着函数
* 时间:2014年8月27日11:13:14
* 作者:cutter_point
*/
#include"Stack3.h"
#include"../require.h"
using namespace std;
/*
struct Link
{
void* data;
Link* next;
Link(void* dat, Link* nxt);
~Link();
}*head;
public:
Stack();
~Stack();
void push(void* dat); //压入一个数据
void* peek(); //返回栈的顶元素但是在栈中不删除元素
void* pop(); //返回栈顶元素,并且从栈中删除这个元素
*/
Stack::Link::Link(void* dat, Link* nxt)
{
data=dat;
next=nxt;
}
// ~Link();
Stack::Link::~Link()
{
}
// Stack();
Stack::Stack()
{
head=nullptr;
}
// ~Stack();
Stack::~Stack()
{
require(head == nullptr, "Stack not empty");
}
// void push(void* dat); //压入一个数据
void Stack::push(void* dat)
{
head=new Link(dat, head); //创建一个新节点,然后把原来的节点重新赋值给老节点
}
// void* peek(); //返回栈的顶元素但是在栈中不删除元素
void* Stack::peek()
{
require(head != nullptr, "Stack empty");
return head->data;
}
// void* pop(); //返回栈顶元素,并且从栈中删除这个元素
void* Stack::pop()
{
if(head == nullptr)
return 0;
void* result=head->data;
Link* oldHead=head;
head=head->next;
delete oldHead; //去除元素,回收内存空间
return result;
}
/*
Link和Stack仅仅存放指针,但他们不负责清除这些指针
要知道由谁来清除这个对象,对于一个程序是成功还是失败来说是很关键的--这就是为什么
如果Stack对象销毁时不为空,Stack::~Stack()就会打印出错误信息的原因
*/
测试文件
/**
* 书本:【ThinkingInC++】
* 功能:测试程序的使用
* 时间:2014年8月27日11:13:20
* 作者:cutter_point
*/
#include"Stack3.cpp"
#include"../require.h"
#include<fstream>
#include<iostream>
#include<string>
using namespace std;
int main()
{
ifstream in("Stack3Test.cpp");
assure(in, "Stack3Test.cpp");
Stack textlines;
string line;
while(getline(in, line))
textlines.push(new string(line)); //压栈,倒序输出
string* s;
while((s=(string*)textlines.pop()) != 0)
{
cout<<*s<<endl;
delete s;
}
return 0;
}
最近想了想是不是要恢复的以前的吧那些理论的东西也写进来呢?因为我们查博客的时候,但看程序的话,有些地方还是不懂的,虽然我写了大量的注释,但是感觉还是要有个层次性的东西。