头文件
/**
* 功能:下推栈(push_down stack)不会越出内存
* 时间:2014年8月18日08:13:36
* 作者:cutter_point
*/
#ifndef STACK_H_INCLUDED
#define STACK_H_INCLUDED
struct Stack
{
struct Link
{
void* data; //这个结构的数据
Link* next; //这个指向这种结构的指针
void initialize(void* dat, Link* nxt); //初始化这个结构,元素和next指向
}*head;
void initialize();
void push(void* dat);
void* peek(); //返回栈顶的元素,但是不删除这个元素
void* pop();
void cleanup();
};
#endif // STACK_H_INCLUDED
定义文件
/**
* 功能:下推栈(push_down stack)不会越出内存,定义
* 时间:2014年8月18日08:12:07
* 作者:cutter_point
*/
#include"Stack.h"
#include"../require.h"
using namespace std;
//struct link里面的额函数
//void initialize(void* dat, Link* nxt) 初始化这个结构,元素和next指向
void Stack::Link::initialize(void* dat, Link* nxt)
{
data=dat;
next=nxt;
}
//Stack里面的函数,初始化函数
// void initialize();
void Stack::initialize(){head=nullptr;}
// void push(void* dat);
void Stack::push(void* dat)
{
Link* newLink=new Link;
newLink->initialize(dat, head); //吧这个节点接到头结点前面
head=newLink; //重置头结点
}
// void* peek(); //返回栈顶的元素,但是不删除这个元素
void* Stack::peek()
{
require(head != 0, "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;
}
// void cleanup();
void Stack::cleanup()
{
require(head == nullptr, "Stack not empty");
}
测试文件
/**
* 功能:下推栈(push_down stack)不会越出内存,定义,测试
* 时间:2014年8月18日08:13:31
* 作者:cutter_point
*/
#include"Stack.h"
#include"Stack.cpp"
#include"../require.h" //这个头文件是用直接给的,不是自己写的,不会用
#include<fstream>
#include<iostream>
#include<string>
using namespace std;
int main(int argc, char* argv[]) //argv[1]程序的路径名字
{
//requireArgs(argc, 1); //这个有干扰作用
//ifstream in(argv[1]); //argv[1]程序的路径名字,这个在这里似乎不行
ifstream in("StackTest.cpp"); //argv[1]程序的路径名字
//assure(in, argv[1]); //注释掉,反而可以运行
Stack textlines;
textlines.initialize();
string line;
//重文件中提取string
while(getline(in, line))
textlines.push(new string(line)); //存入链表中
//取出输出来,逆序输出
string* s;
while((s=(string*)textlines.pop()) != 0)
{
cout<<*s<<endl;
delete s;
}
textlines.cleanup();
return 0;
}