遇到谭浩强书上一个单链表操作的小问题, 链表建立后遍历出错,请热心人帮忙解决!!

nodefault 2007-12-20 05:32:31
void CProbabilityDlg::OnInput() //建立链表
{
....
tempNod=pNod=(struct sampleStruc *)malloc(LEN);
tempNod->sampVal=m_Sample;
tempNod->sampProb=m_SampProb;
if(n_Nod==1) headNod=tempNod;
else pNod->next=tempNod; pNod=tempNod;
}

void CProbabilityDlg::OnResult() //遍历链表
{
pNod->next=NULL;
.....
if(headNod!=NULL)
do
{
.........
tempVar+=tempVar1*tempVar1*tempN->sampProb;
tempN=tempN->next; // 这里访问headNod->next出错 ???
}while(tempN!=NULL);
......
}

插入几组数据后,为什么headNod->next域不能访问? 比如插入3组数据(1,2),(3,4),(5,6)。
哪位热心人能否留下邮箱,我把程序发你您帮我查查!
...全文
134 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
nodefault 2007-12-22
  • 打赏
  • 举报
回复
感谢3位仁兄指点!

错误原因分析:

1)// tempNod=pNod=(struct sampleStruc *)malloc(LEN); //重大错误!!!!
// tempNod,pNod均指向最后一个节点,并形成自循环
// headNod 指向第一个节点,其后为非法节点
// 错误原因为本来pNod用来保存原最后一个节点,现在每次都赋新值,旧址没有保存!!!

2)tempNod->next=NULL; //如果没有的话,将导致 tempN=tempN-> next;
// 出错的原因是新节点的后面都要=NULL;
//另外NEW新节点要赋NULL

3)// UpdateData(true); // 汗颜的错误
nodefault 2007-12-21
  • 打赏
  • 举报
回复
感谢my_girlf 解决了问题!
nodefault 2007-12-20
  • 打赏
  • 举报
回复
void CProbabilityDlg::OnInput() //每点击"输入"按钮一次可以输入一个节点的数据,建立链表
{
// TODO: Add your control notification handler code here
CString strSamp,strSampProb, strtemp;
struct sampleStruc *tempNod;

UpdateData(true);

n_Nod++;
tempNod=pNod=(struct sampleStruc *)malloc(LEN);
tempNod->sampVal=m_Sample;
tempNod->sampProb=m_SampProb;

if(n_Nod==1) headNod=tempNod;
else pNod->next=tempNod;
pNod=tempNod;
sumProb+=m_SampProb;

strSamp.Format("%.3f",m_Sample);
strSampProb.Format("%.3f",m_SampProb);
strtemp=strSamp+" "+strSampProb;

m_List.AddString(strtemp);
m_SumSampProb=sumProb;

m_tempExcept+=m_Sample*m_SampProb;
UpdateData(false);
}

void CProbabilityDlg::OnResult() ////点击"计算"按钮时可以计算,遍历链表
{
// TODO: Add your control notification handler code here
pNod->next=NULL;

struct sampleStruc *tempN;
float tempVar=0;
float tempVar1;
tempN=headNod;

if(headNod!=NULL)
do
{
tempVar1=0;
tempVar1=(tempN->sampVal - m_tempExcept);
tempVar+=tempVar1*tempVar1*tempN->sampProb;
tempN=tempN->next;
}while(tempN!=NULL);

m_SampDelta=float(sqrt(tempVar));
m_Exception=m_tempExcept;

UpdateData(true);
}
shakaqrj 2007-12-20
  • 打赏
  • 举报
回复
lz可以把遍历的完整代码贴出来
shakaqrj 2007-12-20
  • 打赏
  • 举报
回复
shakaqrj@yahoo.com.cn
my_girlf 2007-12-20
  • 打赏
  • 举报
回复
yxz_06@126.com
nodefault 2007-12-20
  • 打赏
  • 举报
回复
我已经发到您邮箱里了!
tcxjia 2007-12-20
  • 打赏
  • 举报
回复
tcxssky520@163.com
我看看

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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