fully functional closure

This commit is contained in:
Li Haokun
2021-08-11 14:54:17 +08:00
committed by GitHub
parent bf07faf2ab
commit 331e0e1728
10 changed files with 90 additions and 82 deletions
+25 -25
View File
@@ -2,65 +2,65 @@
# valkmjolnir 2021/3/31
var list=func()
{
var _={begin:nil,end:nil};
var (begin,end)=(nil,nil);
return
{
push_back:func(elem)
{
var tmp={elem:elem,prev:nil,next:nil};
if(_.end!=nil)
if(end!=nil)
{
_.end.next=tmp;
tmp.prev=_.end;
_.end=tmp;
end.next=tmp;
tmp.prev=end;
end=tmp;
}
else
_.begin=_.end=tmp;
begin=end=tmp;
return;
},
push_front:func(elem)
{
var tmp={elem:elem,prev:nil,next:nil};
if(_.begin!=nil)
if(begin!=nil)
{
_.begin.prev=tmp;
tmp.next=_.begin;
_.begin=tmp;
begin.prev=tmp;
tmp.next=begin;
begin=tmp;
}
else
_.begin=_.end=tmp;
begin=end=tmp;
return;
},
pop_back:func()
{
if(_.end!=nil)
_.end=_.end.prev;
if(_.end==nil)
_.begin=nil;
if(end!=nil)
end=end.prev;
if(end==nil)
begin=nil;
else
_.end.next=nil;
end.next=nil;
return;
},
pop_front:func()
{
if(_.begin!=nil)
_.begin=_.begin.next;
if(_.begin==nil)
_.end=nil;
if(begin!=nil)
begin=begin.next;
if(begin==nil)
end=nil;
else
_.begin.prev=nil;
begin.prev=nil;
return;
},
front:func()
{
if(_.begin!=nil)
return _.begin.elem;
if(begin!=nil)
return begin.elem;
return nil;
},
back:func()
{
if(_.end!=nil)
return _.end.elem;
if(end!=nil)
return end.elem;
return nil;
},
};
+13 -13
View File
@@ -2,7 +2,7 @@
# valkmjolnir 2021/3/31
var queue=func()
{
var _={begin:nil,end:nil};
var (begin,end)=(nil,nil);
return
{
push:func(elem)
@@ -12,35 +12,35 @@ var queue=func()
elem:elem,
next:nil
};
if(_.begin==nil)
_.begin=_.end=new_node;
if(begin==nil)
begin=end=new_node;
else
{
_.end.next=new_node;
_.end=new_node;
end.next=new_node;
end=new_node;
}
return;
},
pop:func()
{
if(_.begin!=nil)
_.begin=_.begin.next;
if(_.begin==nil)
_.end=nil;
if(begin!=nil)
begin=begin.next;
if(begin==nil)
end=nil;
},
front:func()
{
if(_.begin!=nil)
return _.begin.elem;
if(begin!=nil)
return begin.elem;
return nil;
},
clear:func()
{
_.begin=_.end=nil;
begin=end=nil;
},
empty:func()
{
return _.begin==nil;
return begin==nil;
}
};
}
+7 -7
View File
@@ -2,35 +2,35 @@
# valkmjolnir 2021/3/31
var stack=func()
{
var _={next:nil};
var next=nil;
return
{
push:func(elem)
{
_.next={elem:elem,next:_.next};
next={elem:elem,next:next};
return;
},
pop:func()
{
var tmp=_.next;
var tmp=next;
if(tmp!=nil)
_.next=tmp.next;
next=tmp.next;
return;
},
top:func()
{
var tmp=_.next;
var tmp=next;
if(tmp!=nil)
return tmp.elem;
return nil;
},
clear:func()
{
_.next=nil;
next=nil;
},
empty:func()
{
return _.next==nil;
return next==nil;
}
};
}