/** * 书本:【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; }
【ThinkingInC++】34、带有构造函数和析构函数的Stack
原文地址:http://blog.csdn.net/cutter_point/article/details/38867211