标题:连表问题
只看楼主
lixang
Rank: 1
等 级:新手上路
帖 子:231
专家分:0
注 册:2006-7-15
 问题点数:0 回复次数:12 
连表问题

# include<iostream.h>

struct S
{
int Date;
S *next;
};

S* Head;

S *create()
{
S* PS;
S* PEnd;
PS=new S;
cin>>PS->Date;
Head=NULL;
PEnd=PS;

while(PS->Date!=0)
{
if(Head==NULL)
Head=PS;
else
PEnd->next=PS;//连接
PEnd=PS; //后挪;
PS=new S;//再分配
cin>>PS->Date;
}
PEnd->next=NULL;
delete PS;
return Head;
}

S* ShowList(S*head)
{
cout<<"shuchu\n";
while(head)
{
cout<<head->Date<<endl;
head=head->next;
}
return head ;
}


S* Shan(S* head, int DaiShanShu) //删除连表
{
S* P;
if(!head)
{
cout<<"不能删除,因为连表为0:\n";
}
if(head->Date==DaiShanShu)
{
P= head;
head=head->next;
delete P ;
}
for( S* G=head;G->next;G=G->next)
{ //另外G->next这个代表什么意思,我第一次看到这中形式
if(G->next->Date==DaiShanShu)
{
P=G->next;
G=G->next->next;
delete P;
cout<<DaiShanShu<<"被删除:\n";
}
}
return head ;
}


void main()
{
S* M;
S* N;
M=create();
ShowList(M);
N=Shan(M,100);
ShowList(N);
return ;
}


那里出了问题,请大家帮我修改以下,谢谢

搜索更多相关主题的帖子: next del include create 
2006-10-17 21:22
summersun
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2005-12-29
得分:0 
for( S* G=head;G->next;G=G->next)
{ //这里的G->next表示判断G->next是否为真,即不等于NULL
if(G->next->Date==DaiShanShu)
{
P=G->next;
// G=G->next->next; 程序错误
G->next=G->next->next; //应改成这样才对
delete P;
cout<<DaiShanShu<<"被删除:\n";
}

2006-10-17 22:56
fukl
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2006-10-11
得分:0 
"-&gt;"是类指针的访问符,for(S* G=head;G-&gt;next;G=G-&gt;next)这里定义G为一个类指针,G-&gt;next就是访问类的成员next
2006-10-18 12:46
lixang
Rank: 1
等 级:新手上路
帖 子:231
专家分:0
注 册:2006-7-15
得分:0 
你好:
以下是引用summersun在2006-10-17 22:56:54的发言:

for( S* G=head;G->next;G=G->next)
{ //这里的G->next表示判断G->next是否为真,即不等于NULL
if(G->next->Date==DaiShanShu)
{
P=G->next;
// G=G->next->next; 程序错误
G->next=G->next->next; //应改成这样才对
delete P;
cout<<DaiShanShu<<"被删除:\n";
}

我按照你的改正了,但是结果仍然出乎意料?你能再帮帮么?

2006-10-18 16:29
lixang
Rank: 1
等 级:新手上路
帖 子:231
专家分:0
注 册:2006-7-15
得分:0 
以下是引用fukl在2006-10-18 12:46:43的发言:
"->"是类指针的访问符,for(S* G=head;G->next!=NULL;G=G->next)这里定义G为一个类指针,G->next就是访问类的成员next

那么这句话能换个更容易理解的写法么,

2006-10-18 16:30
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
得分:0 
for(S* G=head;G-&gt;next!=NULL;G=G-&gt;next)

嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-10-18 17:12
lixang
Rank: 1
等 级:新手上路
帖 子:231
专家分:0
注 册:2006-7-15
得分:0 

程序我该写好了!能正确运行出我要的结果拉!
但遗憾的是,还有一句警告:
如何再改写才能没有警告呢?请大家帮忙呀!

# include<iostream.h>

struct S
{
int Date;
S *next;
};

S* Head;

S *create()
{
S* PS;
S* PEnd;
PS=new S;
cin>>PS->Date;
Head=NULL;
PEnd=PS;

while(PS->Date!=0)
{
if(Head==NULL)
Head=PS;
else
PEnd->next=PS;//连接
PEnd=PS; //后挪;
PS=new S;//再分配
cin>>PS->Date;
}
PEnd->next=NULL;
delete PS;
return Head;
}

S* ShowList(S*head)
{
cout<<"shuchu\n";
while(head)
{
cout<<head->Date<<endl;
head=head->next;
}
return head ;
}


S* Shan(S* head, int DaiShanShu) //删除连表
{
S* P;
if(!head)
{
cout<<"不能删除,因为连表为0:\n";
}
if(head->Date==DaiShanShu)
{
P= head;
head=head->next;
delete P ;
}
for( S* G=head;G->next;G=G->next)
{
if(G->next->Date==DaiShanShu)
{
P=G->next;
G->next=G->next->next;
delete P;
return head ;//正确的返回在这里!
}
// return head 在这里返回则不能删除;
}
cout<<DaiShanShu<<"被删除:\n";
}

void main()
{
S* M;
S* N;
cout<<"创建连表:\n";
M=create();
cout<<"展示连表:\n";
ShowList(M);
cout<<"调用删除:\n";
N=Shan(M,100);
cout<<"展示删除以后的连表:\n";
ShowList(N);
return ;
}

程序我该写好了!能正确运行出我要的结果拉!
但遗憾的是,还有一句警告:
如何再改写才能没有警告呢?请大家帮忙呀!

E:\C++分支\混合\...... : warning C4715: 'Shan' : not all control paths return a value

2006-10-18 17:12
lixang
Rank: 1
等 级:新手上路
帖 子:231
专家分:0
注 册:2006-7-15
得分:0 
以下是引用song4在2006-10-18 17:12:05的发言:
for(S* G=head;G->next!=NULL;G=G->next)

谢谢你拉!

2006-10-18 17:13
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
得分:0 
shan函数没有完全返回值
也就是说你的返回条件不互补
比如如果没有代删值
你就没有返回语句

嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-10-18 17:17
lixang
Rank: 1
等 级:新手上路
帖 子:231
专家分:0
注 册:2006-7-15
得分:0 

我不大明白

你能在我的程序上修该一下么,或者再程序上标注一下么?
或许那样我就能理解拉!

[此贴子已经被作者于2006-10-18 17:21:50编辑过]

2006-10-18 17:18



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-97016-1-1.html




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

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