| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 911 人关注过本帖
标题:关于链表的程序....
只看楼主 加入收藏
programmer7
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2006-10-23
收藏
 问题点数:0 回复次数:7 
关于链表的程序....

我是个初学C++者,有很多不懂的,望大家指教..我有个链表程序,就是不知道怎么改才对
#include<iostream.h>
class Node{
friend class List;
private:
int date;
Node *next; //后继指针
};
class List{
Node *PList;
static int ElemCount; //ElemCount是元素个数-1
public:
List(); //柝构函数
~List();
int Build_IN(int i,int NodeElem); //从第i个元素插入NodeElem
void Display_HT(); //从头到尾显示链表元素
void Clear();
};

int List::ElemCount=0;

List::List(){PList=new Node;PList=0;} //1

int List::Build_IN(int i,int NodeElem) //2
{
if(i>ElemCount+1) //如果i大于元素个数-1,输出错误并返回
{
cout<<"ERROR!"<<endl;
return 0;
}
int j=0;
Node *Temp_List;
Temp_List->date=NodeElem; //赋值给date
while(PList==0&&j>i-2){PList=PList->next;j++;}
if(PList->next==0){
Temp_List=PList->next;
PList->next=0;
}
Temp_List->next=PList->next;
PList->next=Temp_List;
ElemCount++;
}

void List::Display_HT()
{
cout<<"Display from first one"<<endl;
for(int i=0;i<ElemCount;i++){
cout<<PList->date<<" ";
PList=PList->next;
}
cout<<endl;
}
List::~List()
{
Clear();
}

void List::Clear()
{
Node *Temp_Delete=PList;
if(Temp_Delete==0)
return;
while(Temp_Delete!=0)
{
Node *TEMP_Delete=Temp_Delete;
Temp_Delete=Temp_Delete->next;
delete TEMP_Delete;
}
}

void main()
{
List List1;
List1.Build_IN(1,6);
List1.Build_IN(1,8);
List1.Build_IN(2,7);
List1.Display_HT();
}
以上是我不明白的部分....
1.....PList=new Node这句有没必要???????
2.....这里是不是每次调用时PList都不同???????怎么才能每次调用该函数时PLsit都为同一个值,即PList指向地址1,之后PList变了,但是第二次调用该函数时,PList也是指向地址1...
3总之,怎么改才对,帮一下手.谢谢....

搜索更多相关主题的帖子: 链表 
2007-03-30 21:17
cpluslover
Rank: 1
等 级:新手上路
威 望:1
帖 子:91
专家分:0
注 册:2006-12-13
收藏
得分:0 

我研究了下你的程序,给你改了一点
因为不明白你要想怎么插入,就私自做决定加了个头结点,里面放-1,做哨兵用吧
看看试试吧

#include<iostream.h>
#include<stdlib.h>
class Node
{
friend class List;
private:
int date;
Node *next;
};

class List
{

Node *PList;
static int ElemCount; //y元素个数,我给加了个头结点包括头结点
public:
List(); //柝构函数
~List();
void Build_IN(int i,int NodeElem); //从第i个元素前还是后??按后处理吧插入NodeElem
void Display_HT(); //从头到尾显示链表元素
void Clear();
};

int List::ElemCount=1;//定义为1目的是把头结点-1也包含进去了

List::List()
{
PList=new Node;
PList->next=NULL;
PList->date=-1; //用-1表示它是头结点,当哨兵用吧。
} //1

void List::Build_IN(int i,int NodeElem) //2
{
Node* copy_PList=PList;
if(i>ElemCount||i<1) //用的后插法第i个元素后面,因为有头结点。
{
cout<<"ERROR!"<<endl;
exit(1);
}

int j=1;
Node *Temp_List=new Node;
Temp_List->date=NodeElem; //赋值给date

while(j<i)
{
copy_PList=copy_PList->next;
j++;
}

Temp_List->next=copy_PList->next;
copy_PList->next=Temp_List;
ElemCount++;

}

void List::Display_HT()
{

Node* copy_PList=PList;

if(!copy_PList) cout<<"have no Element!"<<endl;

cout<<"Display from first one"<<endl;
for(int i=0;i<ElemCount;i++)
{
cout<<copy_PList->date<<" ";
copy_PList=copy_PList->next;
}
cout<<endl;
}

List::~List()
{
Clear();
}

void List::Clear()
{
Node *Temp_Delete=PList;
while(!Temp_Delete)
{
Temp_Delete=Temp_Delete->next;
delete PList;
}
PList=NULL;
}

void main()
{
List List1;
List1.Build_IN(1,6);
List1.Build_IN(1,8);
List1.Build_IN(2,7);
List1.Display_HT();
}


“运行正确”的程序不见得是高质量的程序
2007-03-31 23:48
RL720
Rank: 1
等 级:新手上路
帖 子:148
专家分:0
注 册:2005-11-6
收藏
得分:0 
Answer:
1、肯定有必要。。。不建立一个头节点后面的节点连到哪? 不过不是=0吧。。。是NULL。。
2、什么意思??
3、参见2楼

2007-04-01 00:05
Arcticanimal
Rank: 3Rank: 3
等 级:论坛游民
威 望:7
帖 子:341
专家分:20
注 册:2007-3-17
收藏
得分:0 
插入的新元素要用new
这样
Node *Temp_List;
Temp_List->date=NodeElem; //赋值给date
是不行的,Temp_List在Build_IN函数结束后就被删除,copy_PList->next就会指向一个错误的地址

try new catch
2007-04-01 11:11
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 
以下是引用cpluslover在2007-3-31 23:48:04的发言:

我研究了下你的程序,给你改了一点
因为不明白你要想怎么插入,就私自做决定加了个头结点,里面放-1,做哨兵用吧
看看试试吧

#include<iostream.h>
#include<stdlib.h>
class Node
{
friend class List;
private:
int date;
Node *next;
};

class List
{

Node *PList;
static int ElemCount; //y元素个数,我给加了个头结点包括头结点
public:
List(); //柝构函数
~List();
void Build_IN(int i,int NodeElem); //从第i个元素前还是后??按后处理吧插入NodeElem
void Display_HT(); //从头到尾显示链表元素
void Clear();
};

int List::ElemCount=1;//定义为1目的是把头结点-1也包含进去了

List::List()
{
PList=new Node;
PList->next=NULL;
PList->date=-1; //用-1表示它是头结点,当哨兵用吧。
} //1

void List::Build_IN(int i,int NodeElem) //2
{
Node* copy_PList=PList;
if(i>ElemCount||i<1) //用的后插法第i个元素后面,因为有头结点。
{
cout<<"ERROR!"<<endl;
exit(1);
}

int j=1;
Node *Temp_List=new Node;
Temp_List->date=NodeElem; //赋值给date

while(j<i)
{
copy_PList=copy_PList->next;
j++;
}

Temp_List->next=copy_PList->next;
copy_PList->next=Temp_List;
ElemCount++;

}

void List::Display_HT()
{

Node* copy_PList=PList;

if(!copy_PList) cout<<"have no Element!"<<endl;

cout<<"Display from first one"<<endl;
for(int i=0;i<ElemCount;i++)
{
cout<<copy_PList->date<<" ";
copy_PList=copy_PList->next;
}
cout<<endl;
}

List::~List()
{
Clear();
}

void List::Clear()
{
Node *Temp_Delete=PList;
while(!Temp_Delete)
{
Temp_Delete=Temp_Delete->next;
delete PList;
}
PList=NULL;
}

void main()
{
List List1;
List1.Build_IN(1,6);
List1.Build_IN(1,8);
List1.Build_IN(2,7);
List1.Display_HT();
}


希望有更多这样的人
态度可贵


嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2007-04-01 12:37
programmer7
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2006-10-23
收藏
得分:0 

谢谢先...就像song4说的那样,有更多谨慎,细心,不厌其烦的人....如果我技术那样,我也想这样

2007-04-02 13:56
快速回复:关于链表的程序....
数据加载中...
 
   



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

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