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