这个程序我弄了两个星期,就是编译,链接无误,运行时却提示错误:本人认为在CreatLinklist函数
中的pend->next = NULL语句没起作用,在调试中提示cout<<"数值"<<n<<"为"<<p->data<<endl有问题,
我自己认为是while(p != NULL)这个语句没起作用引起的,就是p这个指针最后并没有为空指针,但是我
修改两个星期还是没有成功,问题是存在.希望各位高手能给予帮助,最好能运行一下我的程序,然后给我
详细的指导,我也希望能和大家交流,本人将万分感谢诸位同人的帮助.
/* 输入数列,以某数为结束标志,以“先进先出”方式生成单链表,
输出表中各结点的值;再求表中结点的平均值、最大值、最小值。 */
#include <iostream>
#include <cstdlib>
using namespace std;
typedef struct node {
double data;
struct node* next;
}Linklist;
Linklist* CreatLinklist(Linklist* phead)
{
phead = NULL;
Linklist* pend, * pnew;
pend = phead;
do{
if((pnew =(Linklist*)malloc(sizeof(Linklist))) == NULL) {
cout<<"堆区内存已用完!"<<endl;
exit(1);
}
pnew->next = NULL;
cout<<"请输入数值(为0则结束):";
cin>>pnew->data;
if(phead == NULL)
phead = pnew;
else
pend->next = pnew;
pend = pnew;
}while(pnew->data != 0);
pend->next = NULL;
free(pnew);
return phead;
}
void LinkShow(Linklist * phead)
{
int n = 1;
double evp, sum = 0;
Linklist * p = phead;
while(p != NULL) {
cout<<"数值"<<n<<"为"<<p->data<<endl;
sum += p->data;
p = p->next;
n++;
}
evp = sum/n ;
cout<<"表中结点的平均值:"<<evp<<endl;
}
void LinkFun( Linklist * phead)
{
Linklist * pcur;
double min, max;
for(pcur = phead; pcur->next != NULL; pcur = pcur->next) {
if(pcur->next->data > pcur->data)
max = pcur->next->data;
else
max = pcur->data;
if(pcur->next->data < pcur->data)
min = pcur->next->data;
else
min = pcur->data;
}
cout<<"最大值为:"<<max<<endl;
cout<<"最小值为:"<<min<<endl;
}
int main()
{
Linklist a, * head;
head = &a;
head = CreatLinklist(head);
cout<<"表中各节点值为:\n";
LinkShow(head);
LinkFun(head);
return 0;
}