欢迎来到天天文库
浏览记录
ID:20203636
大小:173.50 KB
页数:28页
时间:2018-10-10
《第十章菜单及工具栏》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、指针常用于描述动态存储结构的实现。动态存储结构中常用的有链表,堆栈,队列等存储结构。可以把堆栈和队列看成特殊的链表 本节只是简单介绍一下如何利用指针和记录来实现链表结构。 链表是一组元素的序列,在这个序列中每个元素总是与他前面的元素相链接(第一个元素除外)。这种关系可以通过指针来实现。链表中的元素称为节点,第一个节点称为表头,最后一个称为表尾。指向表头的指针称为头指针,在这个头指针里存放着表头的地址。节点一般用记录来描述,描述节点的记录至少含有两个域,一个用来存放数据,该域的类型根据要存放的数据而定,称为值域;另一个用来存放下一个节点的地址,称为指针域。表尾不
2、指向任何节点,其指针的值为NIL。如图:应用ObjectLPascal的指针和记录类型,图示的链表可以声明如下:Type Node:= Record; Data:Char; Next:^Node; End;Var Head:^Node;或者:Type Link=^Node; Node:=Record Data:Char; Next:^Node; End;Var Head:Link; 链表中相邻节点的地址是不连续的。当表头指针失去了指向表头的地址后,就无法找到整个链表,从而不能再对链表进行操作。同样,当任一节点中的指针
3、失去了下一个节点后,链表就会断开,后边的节点就会全部消失。 若让表尾节点原有的空指针指向表头节点,就成为循环链表。如果链表的各节点既有指向前一个节点的指针又有指向后一个节点指针,这时的链表就称为双向链表。 链表可以描述许多实际问题,区别只是链表的值域有所不同。 对链表的操作有查找,插入,删除等。对于插入和删除操作来说,链表是很实用的数据结构。不论在链表的什么位置插入或删除节点,只需修改相应的指针。不必像顺序存储的数组那样需要移动数组中的每个元素。但对于链表来说,只有指针对用户来说是可见的。因此,要访问链表中某个节点的数据,必须从头指针开始依次搜索要访问的元素。
4、 队列和堆栈是特殊的链表。所谓队列就是一个先入先出表。在该表中只允许在表头插入节点,在表尾删除节点。向队列中插入节点称作入队,新节点入队后就成为队列的新表尾;从队列的表头删除节点称为出队,出队后,其后继节点成为表头。由于队列的插入和删除操作分别在两端进行,所以要删除的节点将是队列中最先进入的节点。堆栈则允许在链表的表头进行插入和删除操作。这里表头称为栈顶,另一端为栈底。向一个堆栈中插入新节点成为入栈或压栈,新节点插入后成为新的栈顶节点;从堆栈中删除节点称为出栈或退栈,它是把栈顶节点删除掉,是其相邻的节点成为新的栈顶。由于插入和删除仅在栈顶一端进行,后进栈的节点必然会先
5、被删除,所以堆栈又称为先进后出表。【例9-1】下列是一个关于在链表中利用指针处理字符串的程序。 分析:该程序的功能是通过一个文本编辑框输入一个字符串,输入后将该字符串存入一个链表中。每输入一次,在链表中新添一个节点。输入一些字符串后,单击“显示”按钮将输入的所有字符串显示在一个列表框中。通过文本编辑框输入的所有字符串显示在一个列表框中。通过文本框输入要查找的字符串,然后单击“删除”,将该字符串从链表中删除。此时再按下“显示”按钮,显示新的链表中的数据。 设计时添加一个组件Edit,名为Edit1,添加一个组件Memo,名为Memo1,三个Button组件:“删除”名为b
6、tnDel,“显示”名为btnList,“退出”名为btnQuit。 为了实现程序的功能,先声明一个全程的链表结构类型并命名一个该类型变量。这些在窗体单元的实现部分的开始处进行实现:implementation{$R*.dfm}type pLink=^Node; Node=record Data:string[30]; Next:pLink; end;var Head:pLink;当程序创建窗体时进行变量Head的初始化:procedureTForm1.FormCreate(Sender:TObject);begin Head:=Nil;end
7、; 当在文本编辑框中输入字符串并按下回车键后,在链表上添加一个新节点,并将输入的数据保存在该节点的数据域中,这个功能通过Edit1的OnKeyPress处理过程实现:procedureTForm1.Edit1KeyPress(Sender:TObject;varKey:Char);var tempP,P:pLink;begin ifKey=#13then //如果按下回车键 begin New(tempP); //创建一个节点 tempP^.Data:=Edit1.Text; te
此文档下载收益归作者所有