#include <cstdio>
#include <cstdlib>
#include <fstream>
inline void require(bool requirement,
const char* msg = "Requirement failed") {
using namespace std;
if (!requirement) {
fputs(msg, stderr);
fputs("\n", stderr);
exit(1);
}
}
inline void requireArgs(int argc, int args,
const char* msg = "Must use %d arguments") {
using namespace std;
if (argc != args + 1) {
fprintf(stderr, msg, args);
fputs("\n", stderr);
exit(1);
}
}
inline void requireMinArgs(int argc, int minArgs,
const char* msg =
"Must use at least %d arguments") {
using namespace std;
if(argc < minArgs + 1) {
fprintf(stderr, msg, minArgs);
fputs("\n", stderr);
exit(1);
}
}
inline void assure(std::ifstream& in,
const char* filename = "") {
using namespace std;
if(!in) {
fprintf(stderr,
"Could not open file %s\n", filename);
exit(1);
}
}
inline void assure(std::ofstream& in,
const char* filename = "") {
using namespace std;
if(!in) {
fprintf(stderr,
"Could not open file %s\n", filename);
exit(1);
}
}
class Stack{
struct Link{
void* data;
Link* next;
Link(void* dat, Link*nxt);
~Link();
}*head;
public:
Stack();
Stack(void** mass,int size);
~Stack();
void push(void *dat);
void * peek();
void * pop();
};
using namespace std;
Stack::Link::Link(void* dat, Link*nxt){
data=dat;
next=nxt;
}
Stack::Link::~Link(){}
Stack::Stack(){head=0;}
Stack::Stack(void** mass,int size){
head = 0;
for(int i=0;i<size;++i)
push(mass[i]);
}
Stack::~Stack(){require(head==0,"Stack not empty");}
void Stack::push(void *dat){
head=new Link(dat,head);
}
void* Stack::peek(){
require(head!=0,"Stack empty");
return head->data;
}
void* Stack::pop(){
if(head==0) return 0;
void*result=head->data;
Link*OL=head;
head=head->next;
delete OL;
return result;
}
#include <iostream>
#include <string>
int main(){
const int size = 25;
std::string* Film[size];
//std::string** Film = new std::string* [size];
//void** Film = reinterpret_cast<void**>(new std::string* [size]);
for(int i=0;i<size;i++)
{
Film[i] = new std::string( i+1, '*');
}
Stack FilmsStack( reinterpret_cast<void**>(Film),size);
std::string* s;
while (s = static_cast<std::string*>(FilmsStack.pop()) )
{
std::cout << *s << std::endl;
delete s;
}
return 0;
}
I2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPGNzdGRsaWI+CiNpbmNsdWRlIDxmc3RyZWFtPgogCmlubGluZSB2b2lkIHJlcXVpcmUoYm9vbCByZXF1aXJlbWVudCwgCiAgY29uc3QgY2hhciogbXNnID0gIlJlcXVpcmVtZW50IGZhaWxlZCIpIHsKICB1c2luZyBuYW1lc3BhY2Ugc3RkOwogIGlmICghcmVxdWlyZW1lbnQpIHsKICAgIGZwdXRzKG1zZywgc3RkZXJyKTsKICAgIGZwdXRzKCJcbiIsIHN0ZGVycik7CiAgICBleGl0KDEpOwogIH0KfQogCmlubGluZSB2b2lkIHJlcXVpcmVBcmdzKGludCBhcmdjLCBpbnQgYXJncywgCiAgY29uc3QgY2hhciogbXNnID0gIk11c3QgdXNlICVkIGFyZ3VtZW50cyIpIHsKICB1c2luZyBuYW1lc3BhY2Ugc3RkOwogICBpZiAoYXJnYyAhPSBhcmdzICsgMSkgewogICAgIGZwcmludGYoc3RkZXJyLCBtc2csIGFyZ3MpOwogICAgIGZwdXRzKCJcbiIsIHN0ZGVycik7CiAgICAgZXhpdCgxKTsKICAgfQp9CiAKaW5saW5lIHZvaWQgcmVxdWlyZU1pbkFyZ3MoaW50IGFyZ2MsIGludCBtaW5BcmdzLAogIGNvbnN0IGNoYXIqIG1zZyA9IAogICAgIk11c3QgdXNlIGF0IGxlYXN0ICVkIGFyZ3VtZW50cyIpIHsKICB1c2luZyBuYW1lc3BhY2Ugc3RkOwogIGlmKGFyZ2MgPCBtaW5BcmdzICsgMSkgewogICAgZnByaW50ZihzdGRlcnIsIG1zZywgbWluQXJncyk7CiAgICBmcHV0cygiXG4iLCBzdGRlcnIpOwogICAgZXhpdCgxKTsKICB9Cn0KICAKaW5saW5lIHZvaWQgYXNzdXJlKHN0ZDo6aWZzdHJlYW0mIGluLCAKICBjb25zdCBjaGFyKiBmaWxlbmFtZSA9ICIiKSB7CiAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKICBpZighaW4pIHsKICAgIGZwcmludGYoc3RkZXJyLAogICAgICAiQ291bGQgbm90IG9wZW4gZmlsZSAlc1xuIiwgZmlsZW5hbWUpOwogICAgZXhpdCgxKTsKICB9Cn0KIAppbmxpbmUgdm9pZCBhc3N1cmUoc3RkOjpvZnN0cmVhbSYgaW4sIAogIGNvbnN0IGNoYXIqIGZpbGVuYW1lID0gIiIpIHsKICB1c2luZyBuYW1lc3BhY2Ugc3RkOwogIGlmKCFpbikgewogICAgZnByaW50ZihzdGRlcnIsCiAgICAgICJDb3VsZCBub3Qgb3BlbiBmaWxlICVzXG4iLCBmaWxlbmFtZSk7CiAgICBleGl0KDEpOwogIH0KfQoKY2xhc3MgU3RhY2t7CiAgICBzdHJ1Y3QgTGlua3sKICAgICAgICB2b2lkKiBkYXRhOwogICAgICAgIExpbmsqIG5leHQ7CiAgICAgICAgTGluayh2b2lkKiBkYXQsIExpbmsqbnh0KTsKICAgICAgICB+TGluaygpOwogICAgfSpoZWFkOwpwdWJsaWM6CiAgICBTdGFjaygpOwogICAgU3RhY2sodm9pZCoqIG1hc3MsaW50IHNpemUpOwogICAgflN0YWNrKCk7CiAgICB2b2lkIHB1c2godm9pZCAqZGF0KTsKICAgIHZvaWQgKiBwZWVrKCk7CiAgICB2b2lkICogcG9wKCk7Cn07Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiAKU3RhY2s6Okxpbms6Okxpbmsodm9pZCogZGF0LCBMaW5rKm54dCl7CiAgICBkYXRhPWRhdDsKICAgIG5leHQ9bnh0Owp9ClN0YWNrOjpMaW5rOjp+TGluaygpe30KIAogClN0YWNrOjpTdGFjaygpe2hlYWQ9MDt9CiAKU3RhY2s6OlN0YWNrKHZvaWQqKiBtYXNzLGludCBzaXplKXsKCWhlYWQgPSAwOwogICAgICAgIGZvcihpbnQgaT0wO2k8c2l6ZTsrK2kpCiAgICAgICAgICAgIHB1c2gobWFzc1tpXSk7Cn0KClN0YWNrOjp+U3RhY2soKXtyZXF1aXJlKGhlYWQ9PTAsIlN0YWNrIG5vdCBlbXB0eSIpO30KIAp2b2lkIFN0YWNrOjpwdXNoKHZvaWQgKmRhdCl7CiAgICBoZWFkPW5ldyBMaW5rKGRhdCxoZWFkKTsKfQogCnZvaWQqICBTdGFjazo6cGVlaygpewogICAgcmVxdWlyZShoZWFkIT0wLCJTdGFjayBlbXB0eSIpOwogICAgcmV0dXJuIGhlYWQtPmRhdGE7Cn0Kdm9pZCogIFN0YWNrOjpwb3AoKXsKICAgIGlmKGhlYWQ9PTApIHJldHVybiAwOwogICAgdm9pZCpyZXN1bHQ9aGVhZC0+ZGF0YTsKICAgIExpbmsqT0w9aGVhZDsKICAgIGhlYWQ9aGVhZC0+bmV4dDsKICAgIGRlbGV0ZSBPTDsKICAgIHJldHVybiByZXN1bHQ7Cn0KCiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHN0cmluZz4KIAppbnQgbWFpbigpewoKCWNvbnN0IGludCBzaXplID0gMjU7CglzdGQ6OnN0cmluZyogRmlsbVtzaXplXTsgCgkvL3N0ZDo6c3RyaW5nKiogRmlsbSA9IG5ldyBzdGQ6OnN0cmluZyogW3NpemVdOwoJLy92b2lkKiogRmlsbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihuZXcgc3RkOjpzdHJpbmcqIFtzaXplXSk7Cglmb3IoaW50IGk9MDtpPHNpemU7aSsrKSAKCXsgCgkgICAgRmlsbVtpXSA9IG5ldyBzdGQ6OnN0cmluZyggaSsxLCAnKicpOyAgCgl9IAoJIAoJU3RhY2sgRmlsbXNTdGFjayggcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KEZpbG0pLHNpemUpOyAKCSAKCXN0ZDo6c3RyaW5nKiBzOyAgIAoJd2hpbGUgKHMgPSBzdGF0aWNfY2FzdDxzdGQ6OnN0cmluZyo+KEZpbG1zU3RhY2sucG9wKCkpICkgCgl7CgkgICBzdGQ6OmNvdXQgPDwgKnMgPDwgc3RkOjplbmRsOwoJICAgZGVsZXRlIHM7Cgl9CgoKICAgIHJldHVybiAwOwogCn0K