| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 814 人关注过本帖
标题:[讨论][求助]编译,链接无误,运行时却提示错误.
只看楼主 加入收藏
andersion
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2007-5-28
收藏
 问题点数:0 回复次数:2 
[讨论][求助]编译,链接无误,运行时却提示错误.

这个程序我弄了两个星期,就是编译,链接无误,运行时却提示错误:本人认为在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;
}

搜索更多相关主题的帖子: 链接 编译 无误 运行 提示 
2007-05-28 22:22
zinking
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:35
帖 子:916
专家分:0
注 册:2004-12-5
收藏
得分:0 

象这种链表等数据结构其实是最考人的编程能力的

你说的编译链接无误,运行出错。呵呵可能还是新手,这才是问题啊,编译连接都有问题,程序不是这样的。

建议你就是在可疑的地方插断点,然后仔细的调试,呵呵这可是提升自己的好时候哦

http://kongfuziandlife. http://codeanddesign.
2007-05-28 22:58
sai1988
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2007-7-12
收藏
得分:0 

#include <iostream.h>
template <class Type> class Queue;
template <class Type> class QueueNode{ //链式栈节点类定义
friend class Queue <Type>;
private:
Type data; //数据域
QueueNode <Type>*link; //链域
QueueNode (Type d=0,QueueNode*l=NULL):data(d),link(l){}//构造函数
};
template <class Type> class Queue { //链式队列类定义
public:
Queue(): rear(NULL),front(NULL){} //构造函数

~Queue(); //析构函数

void EnQueue(const Type & item); //将item加到队列中

Type DeQueue(); //删除并返回队头元素的值

Type GetFront (); //查看队头元素的值

void GetMax(); //获得队列元素的最大值
void GetMin(); //获得队列元素的最小值
int GetSize()const; //获得队列元素的个数
void Average(); //获得队列元素的平均值

void GetValue(); //逐个输出队列元素
int IsEmpty () const {return front ==NULL;}//判断队列空否
friend istream &operator >>(istream &in, Queue<Type> &Q);


private:
QueueNode <Type> *front,*rear; //队头.队尾指针

};

template <class Type>
istream &operator >>(istream &in, Queue<Type> &Q) //重载操作:输入并建立一个链式队列Q. in是输入流对象
{
Type item;
cout<<"输入队列的元素以任意字母或符号结束: "; //提示:输入数据

while(in>>item) //判断是否结束输入
{
Q.EnQueue(item);

cout<<"输入队列的元素以字母或符号结束: "; //提示:输入数据
}



return in;
}
template <class Type> Queue <Type>::~Queue(){ //队列的析构函数

QueueNode <Type> *p;
while (front!=NULL){ //逐个删除队列中的节点

p=front;front=front->link;delete p;
}
}

template <class Type>void Queue<Type>::EnQueue(const Type &item){
//将新元素item插入到队列的队尾(链式队列的链尾).
if (front==NULL)
front=rear=new QueueNode <Type>(item,NULL); //空队列时,新节点成为队列的第一个结点
else
rear=rear->link=new QueueNode<Type>(item,NULL); //非空队列时,在链尾追加新的节点并更新队尾指针

}
template <class Type>Type Queue<Type>::DeQueue(){ //将队头节点从链式队列中删除,并返回队头元素
assert(!IsEmpty()); //断言:队列不空则继续执行

QueueNode <Type> *p=front; //队列不空

Type retvalue=p->data; //取出并保存队头节点的数据域

front=front->link;
delete p; //队头指针修改,释放原队头节点

return retvalue; //返回数据存放地址

}
template <class Type>Type Queue<Type>::GetFront()
{
assert (!IsEmpty()); //断言:队列不空则继续执行

return front->data; //取队头元素中的数据值
}
template <class Type>void Queue<Type>::GetValue()
{
QueueNode<Type>*p=front;
cout<<"Data is ";
if (p==NULL) //判断队列是否为空
cout<<"NO"; //返回失败信息

while (p!=NULL)
{
cout<< p->data<<" ";
p=p->link;
}
cout<<endl;
}
template <class Type>void Queue<Type>::GetMax() //获得队列元素的最大值
{

QueueNode<Type>*p=front;
Type x;
if (p==NULL) //判断队列是否为空
cout<<"NO"; //返回失败信息
else
x=p->data;
p=p->link;
while (p!=NULL)
{
if(p->data>=x)
x=p->data;
p=p->link;
}
cout<<"Max = "<<x<<endl;
}
template <class Type>void Queue<Type>::GetMin() //获得队列元素的最小值
{

QueueNode<Type>*p=front;
Type x;
if (p==NULL) //判断队列是否为空
cout<<"NO"; //返回失败信息
else
x=p->data;
p=p->link;
while (p!=NULL)
{
if(p->data<=x)
x=p->data;
p=p->link;
}
cout<<" Min = "<<x<<endl;
}
template <class Type>void Queue<Type>::Average() //获得队列元素的平均值
{
QueueNode <Type>*p=front;
Type sum=0;
if (p==NULL) //判断队列是否为空
cout <<"NO"; //返回失败信息
double Aver;
while (p!=NULL)
{
sum=sum+p->data;
p=p->link;
}
Aver=sum/GetSize();
cout <<"Average is "<<Aver<<endl;

}
template <class Type> int Queue<Type>::GetSize()const{ //获得队列元素的个数

int size=0;
QueueNode <Type>*p=front;
while(p!=NULL)
{
size=size+1;
p=p->link;
}
return size;//返回队列元素的个数
}

void main()
{
Queue <int> Qu;

cin>>Qu;
cout<<"队列中的元素为: ";
Qu.GetValue();
cout<<"队列中元素的最小值为: ";
Qu.GetMin();
cout<<"队列中元素的最大值为: ";
Qu.GetMax();
cout<<"队列中元素的平均值为: ";
Qu.Average();
}

2007-07-12 19:15
快速回复:[讨论][求助]编译,链接无误,运行时却提示错误.
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.011971 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved