对于一个结点来说,分为指针域和数据域,每一个指针域的相连就够成了一个链表。
我的问题是,在内存中,是先存放数据域还是先存放指针域?怎么通过指针域去找到想要的数据呢(在内存中)?由于各个结点可以存放在内存中的不同位置,可一个结点中的指针域和数据域的地址是否连续?
不知有知道的能否解答?
谢谢您!
对于一个结点来说,分为指针域和数据域,每一个指针域的相连就够成了一个链表。
我的问题是,在内存中,是先存放数据域还是先存放指针域?怎么通过指针域去找到想要的数据呢(在内存中)?由于各个结点可以存放在内存中的不同位置,可一个结点中的指针域和数据域的地址是否连续?
不知有知道的能否解答?
谢谢您!
首先明白指针域也是个变量存储的数据,一般没有存放先后
------------------------
| 数据域 | 指针域 | == 这是个节点,数据域存储的是该节点的数据,而指针域是指向下
-----------------------
一个节点内存地址的(这里以单链表为例),有指针域定位内存是:
假设下面是个节点结构
struct node{
int data;
node *next;
}
定位数据域是curent->data ,current是指向结构体node的当前指针,真正的定位其实是通过内存偏移的:*(current ) == data , *(current + 4) == next
===================================
数据域和指针域的地址是联系的,他们总是被定义在同一个结构体中的
先后无所谓,但一个节点的数据域和指针域自然是连续的(它们同在一个结构体内),如果是单向链表,就在指针域中存下一个节点的地址,双向的就前后都存呗。
如果是数组模拟链表的话,就是两个数组(双向三个),一个类型为数据域类型,另一个为整型,两数组中下标相同的元素为同一节点,整型数组记录对应节点的下一个节点的下标。
先存什么后存什么,是看你定义节点时的顺序,定义时数据在前,就先存数据,反之也成立.
在C中,注意指针域实际上也是数据,只不过这个数据是下一节点的内存地址,所以根据这个地址,就可以找到下一个节点.,节点与节点是不同位置的.
但节点内是连续的.所以找到了数据域就找到了指针域