65,126
社区成员
发帖
与我相关
我的任务
分享
#include<iostream>
using namespace std;
struct List
{
int data;
struct List* link;
};
void initList(List* first);
void clearList(List* first);
int Length(List* first);
List* Search(List* first,int x);
List* Locate(List* first,int i);
int Insert(List* first,int i,int x);
int Remove(List* first,int i,int& x);
int main()
{
List a;
initList(&a);
Insert(&a,1,1);
Insert(&a,2,2);
Insert(&a,3,3);
Insert(&a,4,4);
Insert(&a,5,5);
cout<<Length(&a);//就是在Length这个函数出错的
List* p;
p=a.link;
while(p!=NULL)
{
cout<<p->data<<" ";
p=p->link;
}
}
void initList(List* first)
{
first=new List[20];
first->link=NULL;
}
void clearList(List* first)
{
List* p;
while(first->link!=NULL)
{
p=first->link;first=p->link;
delete p;
}
}
int Length(List* first)
{
int count=0;
List* p;
p=first->link;
while(p!=NULL)//当遍历到最后一个结点的时候,最后一个结点的指针域为ox4,而不是ox0;所以条件判断为真,会在执行一次
{ p=p->link;count++; }
return count;
}
List* Locate(List* first,int i)
{
List * p=first;
int k=0;
while(p!=NULL&&k<i)
{ p=p->link;k++;}
return p;
}
int Insert(List* first,int i,int x)
{
List* p=Locate(first,i-1);
List* s=new List[20];
s->data=x;
s->link=p->link;
p->link=s;
}
first->link=NULL
#include<iostream>
using namespace std;
struct List
{
int data;
struct List* link;
};
void initList(List* first);
void clearList(List* first);
int Length(List* first);
List* Search(List* first,int x);
List* Locate(List* first,int i);
int Insert(List* first,int i,int x);
int Remove(List* first,int i,int& x);
int main()
{
List a;
initList(&a);
Insert(&a,1,1);
Insert(&a,2,2);
Insert(&a,3,3);
Insert(&a,4,4);
Insert(&a,5,5);
cout<<Length(&a);
List * p;
p = a.link;
while(p!=NULL)
{
cout<<p->data<<" ";
p=p->link;
}
}
void initList(List* first)
{
//first = new List[sizeof(List)]; /*注释掉这句*/
first->link = NULL;
}
void clearList(List* first)
{
List* p;
while(first->link!=NULL)
{
p = first->link;
first = p->link;
delete p;
}
}
int Length(List* first)
{
int count=0;
List* p;
p=first->link;
while(p)
{ p = p->link;
count++;
}
return count;
}
List* Locate(List* first,int i)
{
List * p = first;
int k=0;
while(p && k<i)
{
p = p->link;
k++;
}
return p;
}
int Insert(List* first,int i,int x)
{
List* p = Locate(first,i-1);
List* s = new List[sizeof(List)];
s->data=x;
s->link=p->link;
p->link=s;
return 0;
}
只需要注释掉初始化函数initList里的一句就可以了
另外,new的空间应该使用sizeof一下,而不是每次都是20.
为什么注释掉一句就可以,因为main函数里定义的a是结构体变量而不是指针。