数据结构菜鸟,求大神支招!

穆林幕 2013-10-13 09:00:59
#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;
}

初学数据结构,编程功底不好,现在觉得好乱,请大神详细讲解一下吧!谢谢各位大神啦!!!
...全文
216 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
穆林幕 2013-10-14
  • 打赏
  • 举报
回复
引用 1 楼 Revivedsun 的回复:
都是链表的基本操作,不要乱,一个一个操作区看。 比如获取元素,要先检验参数的有效性,然后获取指定结点的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;

}

}
可是为什么书上都是那么写的啊
 Node<ElemType> LinkList<ElemType>::* GetElemPtr(int position)
 {
 	Node<ElemType> *tmp=head;
 	int curpost=0;
 	while(tmp!=NULL && curpost<position)
 	{
 		tmp=tmp->next;
 		curpost++;
 	}
 	if(tmp!=NULL && curpost==position)
 	     return tmp;
 	return NULL;
 }
困在这个地方不知道该怎么办了,代码能力太差了!
FserSuN 2013-10-13
  • 打赏
  • 举报
回复
引用 2 楼 u010582475 的回复:
[quote=引用 1 楼 Revivedsun 的回复:] 都是链表的基本操作,不要乱,一个一个操作区看。 比如获取元素,要先检验参数的有效性,然后获取指定结点的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;

}

}
在那个GetElement()函数里tmp->data =e 为什么会报错?我那个指针的动态分配内存那一块不太清楚,链表里面是怎么样给每一个结点动态分配的?还有那些指针,直接就可以使用么?指向结构体的指针还用动态分配内存么?C语言没学好,不好意思,给大神添乱了,求大神指教![/quote] 指向结构体的指针要指向某个具体的结点肯定要先为该结点分配内存。然后领成员指针指向该结点。 如果是尾结点赋值NULL。 tmp通过locate得到,报错说明locate函数有问题。调下,看locate的返回的temp是否有效。
穆林幕 2013-10-13
  • 打赏
  • 举报
回复
tmp->data =e 编译器指出 0xC0000005: Access Violation. 的错误,对于内存的了解甚少。。。。
穆林幕 2013-10-13
  • 打赏
  • 举报
回复
引用 1 楼 Revivedsun 的回复:
都是链表的基本操作,不要乱,一个一个操作区看。 比如获取元素,要先检验参数的有效性,然后获取指定结点的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;

}

}
在那个GetElement()函数里tmp->data =e 为什么会报错?我那个指针的动态分配内存那一块不太清楚,链表里面是怎么样给每一个结点动态分配的?还有那些指针,直接就可以使用么?指向结构体的指针还用动态分配内存么?C语言没学好,不好意思,给大神添乱了,求大神指教!
FserSuN 2013-10-13
  • 打赏
  • 举报
回复
都是链表的基本操作,不要乱,一个一个操作区看。 比如获取元素,要先检验参数的有效性,然后获取指定结点的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;

}

}

33,007

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧