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

# 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!=NULL;G=G->next)
{
if(G->next->Date==DaiShanShu)
{
P=G->next;
G->next=G->next->next;
delete P;
cout<<DaiShanShu<<"已经被删除:\n";
return head ;//正确的返回在这里!
}
}
cout<<DaiShanShu<<"不能被发现:\n";
return 0;
}

//假定表的数据按从小到大的顺序
S* Insert(S* head, S* Insert_ed) //插入连表
{//空连表情况
if(head==NULL)
{
head=Insert_ed;
Insert_ed->next=NULL;
return head;
}
if(head->Date>Insert_ed->Date) //在表头插入
{
Insert_ed->next=head;
head=Insert_ed;
return head;
}
for(S* G=head;G!=NULL;G=G->next)
{
if(G->next->Date>Insert_ed->Date)
{
Insert_ed->next=G->next;
G->next=Insert_ed;
cout<<"已经插入了10:\n";
return head;
}
}
return 0;
}

void main()
{
S* M;
S* N;
S* L;
S a;
a.Date=10;
cout<<"创建连表:\n";
M=create();
cout<<"展示连表:\n";
ShowList(M);
/*cout<<"调用插入:\n"; //兰色的部分单独使用则程序正确
N=Insert(M,&a);
cout<<"调用插入后的连表:\n";
ShowList(N);*/
/* cout<<"调用删除:\n"; //红色的部分单独使用程序也正确
L=Shan(M,10);
cout<<"展示删除以后的连表:\n";
ShowList(L);*/
return ;
}
问题:二者同时使用则程序正确运行一半,就出现了警告
请大家先在VC上运行以下
第一次:运行兰色
第一次:运行红色
第一次:运行兰红色同时起用
完毕后:
然后大家讨论以下是程序本身存在那些问题呢?
还是有其他问题存在呢?
请大家广泛指点:
谢谢



[此贴子已经被作者于2006-10-18 20:56:59编辑过]

搜索更多相关主题的帖子: include create color style 
2006-10-18 20:51
lixang
Rank: 1
等 级:新手上路
帖 子:231
专家分:0
注 册:2006-7-15
得分:0 

真的希望大家能够指点!

2006-10-19 10:23
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
得分:0 
for(S* G=head->next;;G=G->next)
{
if(G->next==NULL||G->Date>Insert_ed->Date)
{
Insert_ed->next=G->next;
G->next=Insert_ed;
cout<<"已经插入了10:\n";
return head;
}
}

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-10-19 11:11
zkkpkk
Rank: 2
等 级:论坛游民
威 望:5
帖 子:489
专家分:28
注 册:2006-6-17
得分:0 
这种颜色。。。。。。

Viva,espana!
2006-10-20 10:04
lixang
Rank: 1
等 级:新手上路
帖 子:231
专家分:0
注 册:2006-7-15
得分:0 
真心请教大家:

以下是引用wfpb在2006-10-19 11:11:46的发言:

for(S* G=head->next;;G=G->next)
{
if(G->next==NULL||G->Date>Insert_ed->Date)
{
Insert_ed->next=G->next;
G->next=Insert_ed;
cout<<"已经插入了10:\n";
return head;
}
}

你写的这段落和我程序对应的那一段作用是想同的!咱们都是对的!

但我的问题是:
请蚕看我帖子的原来程序:
M=create(); //M记住了创建连表的头指针
N=Insert(M,&a); //调用了M
L=Shan(M,10); //调用了M

问题是主程序单独使用任何一个(或者插入,或者删除)程序都是正确

但是如果程序主程序同时调用了插入和删除函数后就是错误

[此贴子已经被作者于2006-10-23 15:15:30编辑过]

2006-10-23 15:12
银魂飞雪
Rank: 1
等 级:新手上路
帖 子:59
专家分:0
注 册:2006-10-23
得分:0 
回复:(lixang)古怪的问题

你的程序我已经改好了。是insert函数中的for条件有问题,改为(G->next!=NULL)
我本来想把整个程序复制下来,但不知道为什么,粘贴不了。
所以这里简单说一下,如果你要改好的程序,可以给我发邮件:xujunjiea2005@163.com

2006-10-23 17:21



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




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

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