永发信息网

关于pascal语言链表的问题

答案:2  悬赏:50  手机版
解决时间 2021-03-08 09:56
  • 提问者网友:你挡着我发光了
  • 2021-03-07 22:12
关于pascal语言链表的问题
最佳答案
  • 五星知识达人网友:十年萤火照君眠
  • 2021-03-07 23:32
第一个问题:我的理解是,要注意链表是Pascal语言中唯一可以循环定义的类型,所以如果有生硬的格式请不要见怪,否则可能在识别上有困难。如果你的指针变量的next域指向其他类型的变量而非自身,那么怎么拉成链表呢?
刚刚我试验过,如果你试图用两种变量交替拉成链表:
type pointer=^node; 保证在这一句不会报出node没有被定义的原因,我认为就是因为符合链表循环定义的格式。
node=record
v:longint;
next:pointer1; 在这一句就会报错,原因是pointer1还没有被定义。
end;
pointer1=^node1;
node1=record
v:longint;
next:pointer;
end;
第二个问题:可能没有理解p1和p1^的意思,p1指的是指针指向的地址,p1^表示的是指针指向地址存储的变量,在程序中就是Longint,那么将指针的地址赋值给一个Longint是不可行的,正如Pascal报错所言:Incompatible types: got "^LongInt" expected "LongInt"。追问那么既然基类型为longint的指针无法存储一个指针的地址,那为什么基类型为pointer的指针变量p^.next就可以存储指针的地址呢追答基类型为longint的指针可以存储一个指针地址啊。在上面的例子中,p1^:=p2;是将p2这个地址复制给了p1这个地址所对应的longint,相当于类型不匹配啊。如果写成p1:=p2;语法就是正确的,将p2的地址赋值给p1,p1和p2都指向p2所指的longint。
全部回答
  • 1楼网友:十年萤火照君眠
  • 2021-03-08 00:10
就像递归一样
next存下一个数据的指针
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯