需要记忆的算法.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
需要记忆的算法

需要记忆的算法(2)向算法要时间!!! 1、链接表的两种方法 链表的结构比较复杂,但它很有用,许多算法需要它! 操作 指针的方法 记录数组的方法 数据结构定义 Type point=^node; node=record data:longint; next:point; end; Var head,p,q:point; Type node=record data:longint; next:longint; end; var a:array[1..10000] of node; 要注意下标范围 head,p,q:longint; 获得地址(节点位置) New(head); (获得指针地址) new(p); q:=p;(获得指针地址) (其值的大小不必关心,已经分配) Head:=1; (数组下标为连接地址) P:=5; (数组下标为连接地址) 其下标地址的值是显现的,自己分配。 节点访问 Writeln(p^.data); Writeln(p^.next^.data); Writeln(a[p].data); Writeln(a[a[p].next].data); 删除P节点后的节点 1.p^.next:=p^.next^.next; (这样,删掉的节点就丢了)。 2.q:=p^.next; P^.next:=q^.next; Dispose(q);(回收节点) a[p].next:=a[a[p].next].next; a[a[p].next]的节点丢了 回收的方法: 把a[]数组当成栈来处理,出栈相当于new(),而入栈相当于dispose(); 在p节点后插入新节点 new(q); q^.data:=x; (新节点的数据) q^.next:=p^.next; p^.next:=q; q:=分配新下标;a[q].data:=x; a[q].next:=a[p].next; a[p].next:=q; 从头开始,访问所有节点 p:=head; While pnil do Begin Writeln(p^.data); p:=p^next; End; p:=head; While p0 do Begin Writeln(a[p].data); p:=a[p].next; End; 操作 指针的方法 结构数组的方法 数据结构定义 struct node { int data; node *next; }; node *p,*q,*head; struct node { int data; int next; }; node a[10000]; 要注意下标范围 int head,p,q 获得地址(节点位置) Head=new node;(获得指针地址) P=new node;(获得指针地址) q=p; (其值的大小不必关心,已经分配) Head=1; (数组下标为连接地址) P=5; (数组下标为连接地址) 其下标地址的值是显现的,自己分配。 节点访问 cout p-data; cout p-next-data; cout a[p].data; cout a[a[p].next].data; 删除P节点后的节点 1.p-next=p-next-next; (这样,删掉的节点就丢了)。 2.q=p-next; p-next=q-next; delete q;(回收节点) a[p].next=a[a[p].next].next; a[a[p].next]的节点丢了 回收的方法: 把a[]数组当成栈来处理,出栈相当于new,而入栈相当于delete; 在p节点后插入新节点 q=new node; q-data=x; (新节点的数据) q-next:=p-next; p-next:=q; q=分配新下标;a[q].data=x; a[q].next=a[p].next; a[p].next=q; 从头开始,访问所有节点 p=head; While( p!=NULL) { cout p-data; p=p-next; }; p=head; While( p!=0) { Cout a[p].data; p=a[p].next; }; C++ 链接的两种方法: * 环形链接表,头尾相连接,head指向其中一个节点(入口点); * 双向连接表,结构定义时next改为 一个指向儿子son ,另一个指向父亲fa, head指向其中一个节点(入口点) * 二叉树的结构有两个儿子:结构定义时next 改为 left , righ

文档评论(0)

yaobanwd + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档