结构体定义
typedef struct _Node{
int data;
struct _Node* next;
}node;
这是一段单链表排序的函数,其中使用了临时变量temp
void link_order(SLink* p_head) {
SLink* pb, * pf, temp;
pf = p_head;
if (p_head == NULL) {//链表为空
printf("needn't order.\n");
return;
}
if (p_head->next == NULL) {//链表有1个节点
printf("only one print, needn't order.\n");
return;
}
while (pf->next != NULL) {//以pf指向的节点为基准节点
pb = pf->next;//pb从基准点的下一个节点开始
while (pb != NULL) {
if (pf->data > pb->data) {
temp = *pf;
*pf = *pb;
*pb = temp;
temp.next = pf->next;
pf->next = pb->next;
pb->next = temp.next;
}
pb = pb->next;
}//while
pf = pf->next;
}
return;
}
先来说下指针
好多人单纯看可能很顺利,但是如果走一步,让你画一个图,或者讲出具体就困难了,下面我来说下。
首先,指针这一概念必须清楚,指针是指向某一块地址,而那个地址真是保存数据的地方,当我们用*解引用,我们便能得到那块地址保存的数据。
如果我们把x的值改成200,那又会是什么
所以,我们得到结论,一个指针指向的是一块地址,跟他里里面的值没关系!
我们再来看给出的交换节点代码
上面声明了 SLink* pb, * pf, temp;
if (pf->data > pb->data) {
temp = *pf;
*pf = *pb;
*pb = temp;
temp.next = pf->next;
pf->next = pb->next;
pb->next = temp.next;
}
一共有六句代码,我们分别画出每走一步的示意图,让大家彻底理解!
初始是这样的
画的比较潦草哈哈哈,快来让你对指针的理解更上一层楼!