c++环状单链表简单理解(个人见解)

临近年关,公司业务比较少,可以有自己的时间来归纳一些最近学习掌握的知识,仅便于自己目前理解。废话不多说直接上代码:

#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就完成了整个环的组建。此时获得这条环上任意一个节点即可轮询获得所有的节点元素。

 程序运行截图:



猜你喜欢

转载自blog.csdn.net/qq_36568418/article/details/79169136