标签:下推栈 push_down stack 栈 thinkinginc++ struct
/** * 功能:下推栈(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; }
【ThinkingInC++】26、下推栈(push_down stack)不会越出内存,布布扣,bubuko.com
【ThinkingInC++】26、下推栈(push_down stack)不会越出内存
标签:下推栈 push_down stack 栈 thinkinginc++ struct
原文地址:http://blog.csdn.net/cutter_point/article/details/38655249