临近年关,公司业务比较少,可以有自己的时间来归纳一些最近学习掌握的知识,仅便于自己目前理解。废话不多说直接上代码:
#include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <ctype.h> #include <Windows.h> struct student{ int name; int age; student *next; }; int main() { student*st,*st1,*st2; st = st1 = (student*)malloc(sizeof(student)); //printf("st地址为:%p\n",st); //printf("st1地址为:%p\n",st1); st1->age = 14; st1->name = 19; int m = 0; for(;m < 4;m++) { st2 = (student*)malloc(sizeof(student)); st1->next = st2; //给st1的next赋予st2地址 (此时st1代表内存地址完满) st1 = st2; //st1指针解放指向st2内存 st1->age = 15+m; //赋予st2内存地址值 st1->name = 20+m; } st1->next = st; while(st1->next!=NULL) { printf("AGE:%d\n",st1->age); st1 = st1->next; Sleep(1000); } return 0; }对于指针与内存的随着自己的理解加深,目前稍微算是有些眉目了吧。分开理解指针与内存,举个例子而言指针相当于房门钥匙,内存等价于房间,就上述代码而言,将房间里存放完了姓名,年龄,下一个房门钥匙以后,当前的钥匙就可以解放出来,同时变为下一房门钥匙,利用这把钥匙打开下一个房门将里边的姓名、年龄以及下下个房门钥匙都填充完成后,这把指针钥匙就可以依次往下变换,直到你最后的一个元素填充完毕,此时连接整个链表使其变为环即可。最后一个元素添加完成,钥匙指针所指向的就是最后一个房间,只需要将最后一个房间里的钥匙变为最初房间的钥匙即可,因为我们在刚开始添加房间时备份了一把钥匙st,所以只需让st1->next = st就完成了整个环的组建。此时获得这条环上任意一个节点即可轮询获得所有的节点元素。
程序运行截图: