abo追愿txt百度云:C++问题-----关于链表!!!

来源:百度文库 编辑:高考问答 时间:2024/04/28 23:28:39
我对链表不太理解,包括"next为指向其自身结构的指针"这句话我也不太理解,,它们在内存中是怎么运作的啊,希望高手能给我好好的讲一讲链表,能简单明了最好.
//循环为链表记录输入数据
cout<<"\tname Math Computer"<<endl;
for (i=1;;i++) {
cout<<i<<"\t";
cin>>temp->name;
if (temp->name[0]!='*')
{
cin>>temp->math>>temp->computer;
temp->sum=temp->math+temp->computer;
temp->next=NULL;
tail=temp; //设置链表尾指针
}
比如这个该怎么理解,i自加的时候,系统在自动新增加内存吗??
那么在循环为链表输入数据的时候,内存到底是怎么运作的呢?

首先,你理解这句话要避免2个经常容易误解的误区:
1个是next是一个指针,所以他自己占用的内存空间不随结构的大小改变而改变,在32位系统里面恒为4字节,这也就为编译器在编译阶段决定这个指针大小奠定了可能的基础(如果在申明的时候无法决定某个成员的大小,就没有办法为他在编译期分配内存空间).
2是next并不是指向自身结构的指针(汉语真的很博大精深呵呵),应该理解为next是指向以自身结构为类型的另一个结构变量(其实就是那个变量的首地址)

明白上面2个后,就好理解了,1个结构体变量可以通过自身的一个成员(这里是next),得到另一个相同结构体变量的首地址,进而能访问另一个相同结构体变量的内容,而另一个还可以通过同样方法继续访问别的变量,这样就好比1个节点链接1个节点,整个就是一条链了.

双向链表中每个元素有两个指针分别指向下一个和上一个元素,对于表头的元素中指向上一个元素的指针通常置空(NULL),表尾元素中指向下一个元素的指针通常也置空,在加上一些插入、删除、查找的方法构成完整的链表结构。

具体的说明建议看C语言大全中关于链表的详细讲解。

指针是地址
struct Node
{
//数据域
int x;
int y;

//指针域
struct Node *next;
};

//此为建立一个结点
struct Node head;

链表有两个域:数据域、指针域

数据域保存结点的信息
指针域保存下一个结点的地址

注意,是地址
所有要加个星号,即
struct Node *next;

“下一个结点”当然也是结点,而类型便是struct Node