list和vector和stack的实现实例文档格式.docx
《list和vector和stack的实现实例文档格式.docx》由会员分享,可在线阅读,更多相关《list和vector和stack的实现实例文档格式.docx(85页珍藏版)》请在冰点文库上搜索。
![list和vector和stack的实现实例文档格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/8/20735c67-9d47-481b-a307-267f9eb3b457/20735c67-9d47-481b-a307-267f9eb3b4571.gif)
{
public:
list_item(elemTypevalue,list_item*item=0):
_value(value)
{
if(!
item)
_next=0;
else
{
_next=item->
_next;
item->
_next=this;
}
}
elemTypevalue(){return_value;
list_item*next(){return_next;
voidnext(list_item*link){_next=link;
voidvalue(elemTypenew_value){_value=new_value;
private:
elemType_value;
list_item*_next;
};
classlist
list():
_at_front(0),_at_end(0),_current(0),_size(0){}
list(constlist&
);
list&
operator=(constlist&
~list(){remove_all();
voidinsert(list_item<
elemType>
*ptr,elemTypevalue);
voidinsert_end(elemTypevalue);
voidinsert_front(elemTypevalue);
voidinsert_all(constlist&
rhs);
intremove(elemTypevalue);
voidremove_front();
voidremove_all();
list_item<
*find(elemTypevalue);
*next_iter();
*init_iter(list_item<
*it);
voiddisplay(ostream&
os=cout);
voidconcat(constlist&
voidreverse();
intsize();
voidbump_up_size();
voidbump_down_size();
*_at_front;
*_at_end;
*_current;
int_size;
inlinelist_item<
*list<
:
next_iter()
*next=_current?
_current=_current->
next():
_current;
returnnext;
}
init_iter(list_item<
*it)
return_current=it?
it:
_at_front;
inlinelist<
list(constlist<
&
rhs):
_at_front(0),_at_end(0)
{
insert_all(rhs);
&
list<
operator=(constlist<
rhs)
if(this!
=&
remove_all();
insert_all(rhs);
return*this;
inlinevoidlist<
bump_up_size(){++_size;
bump_down_size(){--_size;
inlineintlist<
size(){return_size;
insert(list_item<
*ptr,elemTypevalue)
if(!
ptr)
insert_front(value);
else
bump_up_size();
newlist_item<
(value,ptr);
insert_front(elemTypevalue)
*ptr=newlist_item<
(value);
_at_front)
_at_front=_at_end=ptr;
ptr->
next(_at_front);
_at_front=ptr;
bump_up_size();
insert_end(elemTypevalue)
_at_end)
_at_end=_at_front=newlist_item<
_at_end=newlist_item<
(value,_at_end);
list_item<
find(elemTypevalue)
*ptr=_at_front;
while(ptr)
if(ptr->
value()==value)
break;
ptr=ptr->
next();
returnptr;
voidlist<
display(ostream&
os)
os<
<
"
\n("
<
_size<
)("
;
while(ptr)
os<
ptr->
value()<
)\n"
remove_front()
if(_at_front)
list_item<
_at_front=_at_front->
if(_current==ptr)
_current=_at_front;
bump_down_size();
deleteptr;
remove_all()
while(_at_front)
remove_front();
_size=0;
_at_front=_at_end=0;
intlist<
remove(elemTypevalue)
*plist=_at_front;
intelem_cnt=0;
while(plist&
plist->
plist=plist->
++elem_cnt;
plist)
returnelem_cnt;
*prev=plist;
plist=plist->
while(plist)
if(plist->
prev->
next(plist->
next());
if(_current==plist)
_current=prev->
deleteplist;
++elem_cnt;
bump_down_size();
plist=prev->
if(!
{
_at_end=prev;
returnelem_cnt;
}
else
prev=plist;
plist=plist->
returnelem_cnt;
concat(constlist<
il)
*ptr=il._at_front;
insert_end(ptr->
value());
reverse()
*prev=0;
_at_front=_at_end;
_at_end=ptr;
while(ptr!
=_at_front)
*tmp=ptr->
next(prev);
prev=ptr;
ptr=tmp;
_at_front->
insert_all(constlist<
rhs)
*pt=rhs._at_front;
while(pt)
insert_end(pt->
pt=pt->
intmain()
charbuf[10]="
ygt"
charbuf1[10]="
mylist;
for(inti=0;
i<
10;
i++)
sprintf(buf,"
ygt%d"
i+1);
mylist.insert_front(buf);
mylist.insert_end(buf);
mylist.display();
//用迭代器打印
*cur=mylist.find("
ygt6"
);
*iter;
cout<
endl;
for(iter=mylist.init_iter(cur);
iter;
iter=mylist.next_iter())
cout<
iter->
mylist1;
ygt%c"
i+'
A'
mylist1.display();
mylist.concat(mylist1);
mylist.reverse();
return0;
#endif
classilist_item
ilist_item(intvalue,ilist_item*item_to_link_to=0);
//
intvalue(){return_value;
}//返回_value值
ilist_item*next(){return_next;
}//返回_next指针
voidnext(ilist_item*link){_next=link;
}//给_next指针赋值使_next指向link
voidvalue(intnew_value){_value=new_value;
}//给_value赋值
int_value;
//数据值
ilist_item*_next;
//下一个ilist_item
inlineilist_item:
ilist_item(intvalue,ilist_item*item):
_value(value)
_next=0;
_next=item->
item->
//下面是int型的链表上面是链表模板支持很多类型
classilist
ilist():
_at_front(0),_at_end(0),_size(0){}//
ilist(constilist&
//用链表初始化链表
//返回_size链表长度
voidinsert(ilist_item*ptr,intvalue);
//如果ptr为空从头加入,否则加入prt后面
voidinsert_front(intvalue);
//加到链表头前
voidinsert_end(intvalue);
//从链表尾加入一个节点其值为value
ilist_item*find(intvalue);
//通过节点值查找链表节点
os=cout);
//从链表头遍历到链表尾打印其值
//从链表头开始删除一个节点
//从链表头删除所有节点
intremove(intvalue);
//删除所有节点值是value的节点
voidconcat(constilist&
il);
//从链表尾把il链表追加到本链表
//翻转链表节点,倒序链表
ilist_item*init_iter(ilist_item*it=0);
//初始化迭代器
ilist_item*next_iter();
//下一个元素
ilist&
operator=(constilist&
//赋值重载
voidinsert_all(constilist&
//从链表尾依次把链表rhs追加入链表
//_size链表长度加1
//_size链表长度减1
ilist_item*_at_front;
//指向头
ilist_item*_at_end;
//指向尾
ilist_item*_current;
//当前指针
//链表长度
inlineilist_item*ilist:
ilist_item*next=_current?
init_iter(ilist_item*it)
inlineilist:
ilist(constilist&
inlineilist&
ilist:
operator=(constilist&
inlinevoidilist:
inlineintilist:
insert(ilist_item*ptr,intvalue)
newilist_item(value,ptr);
insert_front(intvalue)
ilist_item*ptr=newilist_item(value);
insert_end(intvalue)
_at_end=_at_front=newilist_item(value);
_at_end=newilist_item(value,_at_end);
ilist_item*ilist:
find(intvalue)
ilist_item*ptr=_at_front;
voidilist: