链表的增删改查

发布于 2021-09-18  120 次阅读


该图已挂载到图床:https://z3.ax1x.com/2021/09/18/4Qf5X4.png

创建链表的逻辑图:

创建链表的代码块:

/************************************创建链表开始************************************/
	
//创建头结点用于保存头结点的地址,方便以后直接通过头指针直接访问;
//解释malloc强转问题:因为malloc原型中的返回值为void*,但是我们在
//使用时需要返回的是Link类型的,因为head需要指向的内容是Link类型的
//结点 
Link head=(Link)malloc(sizeof(List));//申请完成后将地址返回给head头指针,
										 //此时头指针指向的是一个头结点 
	
//另外,如图中所示还需要一个P指针用于定位当前节点
Link p=head;//首先将P指针指向第一个结点(head指针在上一个语句已经指向了头结点) 
				//所以这里直接将head中的地址赋值给P即可
	
//接下来是依次创建五个新的结点
for(int i=0;i<5;i++){
//这里依旧像创建头结点一样创建一个新的结点,只不过上面创建的头结点数据域为空
//这里的新建结点肯定是要有数据的,不然就成了空链表了
Link q=(Link)malloc(sizeof(List)); 
//这里利用一个q指针指向新建结点
		
//给q指针里面赋值------赋值操作
q->data = 'A'+i;
//首先解释这里的q->c,因为q是一个指针,然后我们需要用到其数据域,所以需要用到->
//其次这里的'A'是ASCLL码,在计算机的世界里编译器见到后会自动把'A'转换为对应的ASCLL
//也就是直接把'A'当成65来处理,所以可以进行+1操作;65+1=66,而66对应的是'B'
		
		
//赋值完成1次后要将P指针中的next指针指向q 
      p->next=q; 
     //然后将q指针变成p指针
     p=q; 
} 
p->next=NULL;//当前p在尾结点上,而尾结点的next指针必须指向空,不然会 出现内存泄露等问题 
//至此链表创建结束,其中头结点为空,其余结点中的数据分别为A B C D E 
/************************************创建链表结束************************************/ 

头结点后插入结点的逻辑图: