1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单链表 //linelist.cpp struct SLine { //type:line double xb; double yb; double xe; double ye } //node class Item { public: friend class List;//友元,保证List能够调用Item private: //构造函数,其实一般都把构造函数放public里面 Item (SLine line) { xb=line.xb; yb=line.yb; xe=line.xe; ye=line.ye; next=NULL;//节点中指针指空 } Item *next;//指向Item的指针 double xb,yb,xe,ye; }; //list class List { public: //构造函数(这回他又把构造函数写到public里了。。什么思维。。) List() { list=NULL; //list代表随机游动的指针 //也就是构造一个List的时候,还没有元素,指针空 } //这是里是一个构造函数的多态(重载),也就是说当调用构造函数没参数的时候运行上面那个,有Line这个参数就运行下面这个。 List(SLine line) { list=new Item(line); } SLine List::insert(SLine line) { //调用了Item的构造函数 Item *pt=new Item(line); pt-next=list;//让这个节点插入到list前 list=pt; return line; //默默觉得它没写完啊。。链表断了啊。。。 } SLine List::append(SLine line) { Item *pt=new Item(line);//同上 if(list==NULL) list=pt;//如果链表是空的,就直接添加 else (end())-next=pt; return line; } Item* List::end()//返回值是指向最后节点的指针 { Item *prv,*pt; for(prv=pt=list;pt;prv=pt,pt=pt-next){;} //这句好难懂。。就是先把prv和pt都指向list(可以是链表中随便一个Item,然后判断pt,若pt不为空,就执行prv=pt,pt=pt-next,即向前挪一步,直到pt是空了,pt的前一个Prv就是末位。。。。 return prv; } void List::Delete(SLine line) { Item* pt; for(pt=list) //.... //不写了。。相同。。 //其实这段代码也略坑。。如果有两条线完全相同,他会都给删了的。。。 } } //整个代码里没有涉及list的移动,我猜list的移动是和鼠标点选有关,应该是鼠标点到哪条先就把那条线当list了。 //undo实现放在链表之外,大致思路是链表每改变一个状态,就将前状态放到堆栈里,我们现在只实现1步undo,就不用堆栈了,搞一个老状态就好 // //another cpp in real //其实应该另写文件的,这里就写到一起了 #include ...//上面那个的头文件 int main() { //建立链表 List ListforLine;//为了你读的方便点。。就和pdf里一样 List oldlist;//!!key!!,链表的老状态 //增加元素 addElm(SLine line) { oldlist=ListforLine;//操作前保存老状态 Listforline.append(line); } //删除元素 DelElm(...) { oldlist=ListforLine;//操作前保存老状态 //...其余相同 } void Undo() { //so easy List swaplist;//中转 swaplist=ListforLine; ListforLine=oldlist; oldlist=swaplist; //把old和现在那个交换一下~~~ //当然,如果想实现多步undo,多存几个oldlist其实也可以,只是那样写成堆栈才显得你学过编程。。。。 } } 画轴网 主函数代码:

文档评论(0)

zzqky + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档