数据结构菜鸟,求大神支招!
#include<iostream>
using namespace std;
#define MAX_SIZE 100
struct Node
{
int data;
Node *next;
Node( int da=0){data=da;next=NULL;};
};
class LinkList
{
protected:
int count; //元素个数
Node *head; //t头结点
void Init(int size);
public:
LinkList();
LinkList(int size);
virtual ~LinkList();
int Length();
bool SetElem(int position, int e);
Node *Locate(int position);
int GetElem(int position);
void Insert(int position,Node *n);
void Delete(int position,Node *n);
};
void LinkList::Init(int size)
{
head=new Node;
}
LinkList::LinkList()
{
count=0;
Init(MAX_SIZE);
}
LinkList::LinkList(int size)
{
count=size;
Init(size);
}
LinkList::~LinkList()
{
delete head;
}
int LinkList::Length()
{
return count;
}
Node *LinkList::Locate(int position)
{
if(position<=0 || position>Length())
return NULL;
else
{
int cur=1;
Node *tmp,*p;
tmp=head;
while(cur<position)
{
p=tmp;
cur++;
tmp=p->next;
}
if(tmp!=NULL && cur==position)
return tmp;
return NULL;
}
}
bool LinkList::SetElem(int position,int e)
{
if(position<=0 || position>Length())
return false;
else
{
Node *tmp;
tmp=Locate(position);
tmp->data=e; //指出这步有错????
return true;
}
}
int LinkList::GetElem(int position)
{
if(position<=0 || position>Length())
return -1;
else
{
int cur=1,e;
Node *tmp;
tmp=head;
tmp=Locate(position);
e=tmp->data;
return e;
}
}
void LinkList::Insert(int position,Node *n) //插在指定元素之后
{
//n=new Node();
if(n==NULL)
return ;
Node *fore,*post;
count++;
fore=Locate(position);
post=Locate(position+1);
fore->next=n;
n->next=post;
}
int main()
{
LinkList la(3);
for(int i=1;i<=3;i++)
cout<<la.SetElem(i,i);
for( i=1;i<=3;i++)
cout<<la.GetElem(i)<<endl;
// cout<<la.Length();
// Node *p=new Node();
return 0;
}
初学数据结构,编程功底不好,现在觉得好乱,请大神详细讲解一下吧!谢谢各位大神啦!!!
[解决办法]
都是链表的基本操作,不要乱,一个一个操作区看。
比如获取元素,要先检验参数的有效性,然后获取指定结点的data。而定位 也需要先验证参数有效性,然后进行顺序查找即可。其它同理,过程在分解一下,你单步运行下就清楚了。
int LinkList::GetElem(int position)
{
if(position<=0
[解决办法]
position>Length())
return -1;
else
{
int cur=1,e;
Node *tmp;
tmp=head;
tmp=Locate(position);
e=tmp->data;
return e;
}
}