链表

链表基于:结构本身不能含有同类型结构,但是可以包含指向同类型结构的指针

单链表:链表尾指针为NULL;

typedef struct a{
	...;
	struct a *next; //指向下一个结构体的指针
}A;

A *head = NULL;//头指针
A *prev, *current;

while(1)
{
	current = (A *)malloc(A);//分配内存!
	if(!head)
		head = current; 
	else
		prev->next = current;
	current->next = NULL;//将下一个指针设为NULL,否则尾指针不确定
	...;
	prev = current;  //下次分配时,本次结构为前一结构!
}

//插入节点
int i = ...;//插入位置
int j = 0;
A *pnew;
current = head;
pnew = (A)malloc(A);
while(!current->next && j < i -1)
{
	j++;
	current = current->next;
}
if(!current && j < i -1)
{
	qnew->next = current->next;//把下个结构体指针保存到新结构体中
	current->next = qnew;//新结构体指针保存到上个结构体中
}
//删除节点
i = ...;//删除位置位置
j = 0;
current = head;
A *temp;
temp = head->next
while(!current->next && j < i -1)
{
	j++;
	current = current->next;
	temp = temp->next;
}
if(!current && j < i -1)
{
	current->next = temp->next;//此时链表中已经没有temp指针
	free(temp);
}


//清理列表
current = head;
while(!current)
{
	A *temp;
	temp = current->next; //free的时候current的内存被释放,next
	free(current);	      //的内容已经不再确定
	current = temp;

}

循环链表: 尾指针指向头指针

双向链表: 结构体中同时存在前一个结构体指针和下一个结构体指针

typedef struct a{
...;
struct a *prev;
struct a *next; //指向下一个结构体的指针
}A;





 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值