c语言中节点是什么意思,最好解释的详细易懂一点?

Python019

c语言中节点是什么意思,最好解释的详细易懂一点?,第1张

在数据结构的图形表示中,对于数据集合中的每一个数据元素用中间标有元素值的方框表示,一般称之为数据结点,简称结点。 在C语言中,链表中每一个元素称为“结点”,每个结点都应包括两个部分:一为用户需要用的实际数据;二为下一个结点的地址,即指针域和数据域。 数据结构中的每一个数据结点对应于一个储存单元,这种储存单元称为储存结点,也可简称结点。

如果已知一个节点指针pre和一个节点指针cur,要把cur插入到pre节点之后,很显然要保证链表不会断开而丢失后面的节点,要先把后面的节点指针(指向lat的指针)保存下来,即有cur->next

=

pre->next,然后把cur连接的一串链表连接到pre后面,即pre->next

=

cur

上面介绍了,在一个节点之后插入节点的情况。这是通常的情况。如果要向一个链表的头部插入节点,就只需要将新节点的下一个指针指向链表的头指针即可。

在这种情况下,有两点要注意:

1,链表是否为空链表

2,要插入的节点是不是空指针。

代码实现:

//向单链表中插入一个节点(插入在链开始处)

//输入参数:单链表的头指针和要插入的节点指针

//输出参数:无

//返回值:指向单链表的头指针

singlelist*

insert(singlelist

*head,singlelist

*node)

{

if(node

==

null)

{

return

head

}

else

if(head

==

null)

{

return

node

}

node->next

=

head

head

=

node

return

head

}

链表交换节点有两种方式:

1.

交换结点内容

2.

交换结点位置

如定义以下结构体,分为数据部分和链表指针部分

struct _data {

int num

float score

}

struct stu

{

struct _data data

struct stu *next

}*head, *p1,*p2,*p3,*p4

head->p1->p2->p3->p4 交换结点内容,结点顺序不变,依然保持原样,则交换两个结点时,只交换数据部分,next指针不要动,如:交换p1和p3的内容(数据):

struct _data t=p1->datap1->data=p3->datap3->data=t //这样就可以了。交换结点位置,链表的顺序会发生变化,为保持链表的正常衔接,则要重新设置next的值,过程略有复杂,如:交换p1,p3的位置:最终变成:head->p3->p2->p1->p4

首先,要找到p1的原前趋结点head,和p3的前趋结点p2

然后,开始重新分配链表的排列:

1、p1的原前趋结点(head)的新后继结点 要变成p3

2、p1的新后继结点要变成p3的原后继结点(p4)

3、p3的原前趋结点(p2)的新后继结点 要变成p1

4、p3的新后继结点要变成p1的原后继结点(p2)

struct stu *p1p, *p3p, *p

for( p=headp!=NULLp=p->next )

{

if ( p->next==p1 )

p1p=p//找到p1的前趋head

if ( p->next==p3 )

p3p=p//找到p3的前趋p2

}

p1p->next=p3//p1的原前趋结点 的 新后继结点 变成p3 head->p3

struct stu *tNext=p1->next //保存p1的原后继结点(p2)

p1->next=p3->next//p1的新后继结点要变成p3的原后继结点(p4) p1->p4

p3p->next=p1//p3的原前趋结点 的 新后继结点 变成p1 p2->p1

p3->next=tNext //p3的新后继结点 变成p1的原后继结点 p3->p2