请教:单链表的问题,附代码。

rockwater 2004-04-08 10:23:38
//定义
struct FRUSTUM
{
float trapezium01X ;
float trapezium01Y ;
float trapezium02X ;
float trapezium02Y ;
float trapezium03X ;
float trapezium03Y ;
float trapezium04X ;
float trapezium04Y ;

int FrameRate ;
int IndexColor ;
FRUSTUM *next ;
};

FRUSTUM *pS ;创建的节点
FRUSTUM *Frustum ;//头指针

FRUSTUM *pEnd ;//尾指针


//初始化
pS = new FRUSTUM ;
pS->FrameRate = 0 ;
pS->IndexColor = 0 ;
pS->trapezium01X = 0 ;
pS->trapezium01Y = 0 ;
pS->trapezium02X = 0 ;
pS->trapezium02Y = 0 ;
pS->trapezium03X = 0 ;
pS->trapezium03Y = 0 ;
pS->trapezium04X = 0 ;
pS->trapezium04Y = 0 ;
Frustum = NULL ;
pEnd = pS ;


//以下是一个循环体
if(Frustum == NULL)
Frustum = pS ;
else
pEnd->next = pS ;
pEnd = pS ;

pS = new FRUSTUM ;
pS->FrameRate = 1/m_DeltaFrameTime;
pS->IndexColor = pS->FrameRate/10 ;
pS->trapezium01X = m_Frustum[0][0] ;
pS->trapezium01Y = m_Frustum[0][1] ;
pS->trapezium02X = m_Frustum[1][0] ;
pS->trapezium02Y = m_Frustum[1][1] ;
pS->trapezium03X = m_Frustum[2][0] ;
pS->trapezium03Y = m_Frustum[2][1] ;
pS->trapezium04X = m_Frustum[3][0] ;
pS->trapezium04Y = m_Frustum[3][1] ;

//前提条件
m_Frustum 这个数组每一次循环都有不同的值,m_DeltaFrameTime也一样

//问题
问题是,循环结束后Frustum->next的值一直是进入循环的第一次赋值,如果链起来的话,应该会有不同的值的。百思不解,在线求救!!
...全文
30 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
junnyfeng 2004-04-08
  • 打赏
  • 举报
回复
//初始化
pS = new FRUSTUM ;
pS->FrameRate = 0 ;
pS->IndexColor = 0 ;
pS->trapezium01X = 0 ;
pS->trapezium01Y = 0 ;
pS->trapezium02X = 0 ;
pS->trapezium02Y = 0 ;
pS->trapezium03X = 0 ;
pS->trapezium03Y = 0 ;
pS->trapezium04X = 0 ;
pS->trapezium04Y = 0 ;
Frustum = NULL ; // -> Frustum->next=NULL;
pEnd = pS ;



//以下是一个循环体
if(Frustum == NULL)
Frustum = pS ;// -> Frustum=pEnd;
else
pEnd->next = pS ;
pEnd = pS ;
古布 2004-04-08
  • 打赏
  • 举报
回复
if(Frustum == NULL)
Frustum = pS ;
else
pEnd->next = pS ;
pEnd = pS ;

pS = new FRUSTUM ;// 改为:pS->next = new FRUSTUM;
anggogo 2004-04-08
  • 打赏
  • 举报
回复
哪里来的循环了?

其实遇到这样的问题解决很简单
你把每一个结点的地址都打印出来, 看看到底谁连接到谁了, 就非常清晰到底是什么地方接错了
jp1984 2004-04-08
  • 打赏
  • 举报
回复
//不知道为什么我看不到你说的循环。。。而且 m_Frustum [][]也没有申明啊。。
//我也有点想不通。既然这个数组是静态的,你怎么可能用它来改变节点的值呢?每次当然//是一样的了,数组又没有变

//说实话,我主要是看了你的名字 ,叫毛毛,很亲切。我才 认真认真的看完了这段,很耐心。。
//*love myj*
giraffer 2004-04-08
  • 打赏
  • 举报
回复
呵呵,看着有点晕.不过,Frustum是头指针,应该一直指向链表的第一个节点,因此Frustum->next也就是第二个节点,不会换的啊.不知道理解错没有
rockwater 2004-04-08
  • 打赏
  • 举报
回复
有人救我吗?
danielpan 2004-04-08
  • 打赏
  • 举报
回复
你的Frustum只是头节点,它的地址当然是不会变的阿,而且Frustum->next也不会变啦,因为这个指针要始终指向第2个节点,不然链表就断了。

你可以在运行的时候跟踪ps和pEnd的值,这两个是不停变的。
zhouqingyuan 2004-04-08
  • 打赏
  • 举报
回复
相应部分改成这样子好了

pS = new FRUSTUM ;
pS->FrameRate = 0 ;
pS->IndexColor = 0 ;
pS->trapezium01X = 0 ;
pS->trapezium01Y = 0 ;
pS->trapezium02X = 0 ;
pS->trapezium02Y = 0 ;
pS->trapezium03X = 0 ;
pS->trapezium03Y = 0 ;
pS->trapezium04X = 0 ;
pS->trapezium04Y = 0 ;
pS->next=NULL;
Frustum = pS ;
pEnd = pS ;


while(....)
{
pS = new FRUSTUM ;
pS->FrameRate = 1/m_DeltaFrameTime;
pS->IndexColor = pS->FrameRate/10 ;
pS->trapezium01X = m_Frustum[0][0] ;
pS->trapezium01Y = m_Frustum[0][1] ;
pS->trapezium02X = m_Frustum[1][0] ;
pS->trapezium02Y = m_Frustum[1][1] ;
pS->trapezium03X = m_Frustum[2][0] ;
pS->trapezium03Y = m_Frustum[2][1] ;
pS->trapezium04X = m_Frustum[3][0] ;
pS->trapezium04Y = m_Frustum[3][1] ;
pS->next=NULL;
pEnd->next=pS;
pEnd=pS;
}
msxiaoguo 2004-04-08
  • 打赏
  • 举报
回复
问题是,循环结束后Frustum->next的值一直是进入循环的第一次赋值,如果链起来的话,应该会有不同的值的。百思不解,在线求救!!
//////////////////////////////////////////
把链表的最后一个接点的next=null;
/////////////////////////////////输出函数
void print(FRUSTUM *pFrustum)
{
FRUSTUM *pf;
FRUSTUM *qf;
qf=pFrustum;
do{
pf=qf->next;
qf=pf;
cout<<pf->结构体中变量;
}while(pf->next!=null)
}
rockwater 2004-04-08
  • 打赏
  • 举报
回复
对不起了,各位大哥。
//循环
意思是,我只是把循环里面的内容写了出来。

谢谢各位了,我再试试看

我是在钱能编的C++教程上抄的一段,改动了一点点

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧