数据结构 线性表 for( p;p=q; p) * (p-1)=*p 这句是怎么执行的?

[复制链接]
查看11 | 回复4 | 2011-10-15 03:16:03 | 显示全部楼层 |阅读模式
数据结构线性表for(p;p=q;p)*(p-1)=*p这句是怎么执行的?也就是这句话的具体含义,为什么有两个p后面的*(p-1)=*p和前面连接起来什么意思?statuslistdelete_sq(sqlist1||(il.length))reyurnerror;p=e=*p;q=l.eleml.length-1;for(p;p=q;p)*(p-1)=*p;--l.length;returnok;}//listdelete_sq
回复

使用道具 举报

千问 | 2011-10-15 03:16:03 | 显示全部楼层
第一个p:循环体内部语句执行前,指针P自增一次,指向第二个元素。p=q:如果P的地址大于Q的地址,循环就跳出。*(p-1)=*p:执行循环体内部语句,当前指针P指向元素的前一个元素的值,被复制为Q的地址的值。第二个p:一次循环完毕,指针P再次自增。准备下一次循环。追问您的意思是先执行p然后判断p=q再执行*(p-1)=*p最后执行p对吗?那为什么不能这样写?for(p;p=q;p){*(p-1)=*p;}
回复

使用道具 举报

千问 | 2011-10-15 03:16:03 | 显示全部楼层
可以这么写埃。。。但是这么写,不是有2个括号么。太占行了。。。循环语句for或着while,判断语句if,如果内部语句之后一句话,可以不用括号的。像这样的语句很多。inti=j=n=0;例子1for(i=0;i10;i)for(j=i;i10;j)printf(\"%d\",a[j]);例子2while(i100)i;例子3while(i100)if(i==0)printf(\"%d\",n);
回复

使用道具 举报

千问 | 2011-10-15 03:16:03 | 显示全部楼层
p和p在这里是一样的。*(p-1)=*p;意思是把后面的数据复制到前面。比如原来elem[]={1,2,3,4}//假设最多容纳四个数据当i=2时,第一次执行*(p-1)=*p;时发生的事情就是elem[2]=elem[3];结果就是elem[]={1,2,4,4},但同时由于l.length减了1,所以长度变成3,有效数据为1,2,4,完成了删除第i(2)个数据的操作
回复

使用道具 举报

千问 | 2011-10-15 03:16:03 | 显示全部楼层
这句就是把原来p指向的值传出去。3、q=L.elemL.length-1和q=
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行