# 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编辑过]