2024.2.4

双向链表的头插 头删 尾插 尾删

//头插插入
Doublelink insert_head(Doublelink head,datatype element)
{
	Doublelink s=creat_Node();
	s->data=element;
	//判断是否有空链表
	if(NULL==head)
	{
		head=s;
	}
	else
	{
		s->next=head;
		head->prior=s;
		head=s;
	}
	return head;
}
//头删
Doublelink del_head(Doublelink head)
{
	if(NULL==head)
	{
		return head;
	}
	else
	{
	Doublelink del=head;
	head=head->next;
	head->prior=NULL;
	free(del);
	del=NULL;
	}
    return head;
}

2024.2.4_第1张图片

//尾插
Doublelink insert_rear(Doublelink head,datatype element)
{
	Doublelink s=creat_Node();
	s->data=element;
	if(NULL==head)
	{	head=s;}
	else
	{
		Doublelink p=head;
	while(p->next)
	{
		p=p->next;
	}//找到最后一个结点
	p->next=s;
	s->prior=p;
	}
	return head;
}
//尾删
Doublelink del_rear(Doublelink head)
{
	if(NULL==head)
		return head;
	if(head->next==NULL)
	{
		free(head);
		head=NULL;
		return head;
	}
	else
	{
	//找到最后一个结点
	Doublelink del=head;
	while(del->next)
	{
      del=del->next;

	}
	del->prior->next=NULL;
	free(del);
	del=NULL;
	}
return head;
}

 2024.2.4_第2张图片

按任意元素插入,删除,修改,查找

//双链表任意位置插入
Doublelink insert_element(Doublelink head,int index,datatype key)\
{
	//创建一个结点
	Doublelink s=creat_Node();
	s->data=key;
	//首先找到所插入的位置
	int count=1;
	Doublelink p=head;
	if(index==1||head==NULL)//在为空和第一个位置插入
    return head=insert_head(head,key);
	//如果只有一个元素的情况下
	if(head->next==NULL)
    return	head=insert_rear(head,key);
	while(p)//在第二个以及往后的位置插入
	{
		count++;
		p=p->next;
	if(count==index)
	{
		s->next=p;
		p->prior->next=s;
		s->prior=p->prior;
		p->prior=s;
	}
	}
	return head;
}
//双链表按任意位置删除
Doublelink del_key(Doublelink head,int index)
{
	if(NULL==head)
	{
		return head;
	}
    else if(head->next==NULL)
	{
			free(head);
			head=NULL;
			return head;
	}
	else{
		Doublelink p=head;
	int 	count=1;
 	while(p)
		{
			count++;
  			p=p->next;//p位于要删除的元素
			if(p->next==NULL)//删除最后一个元素
			{
		return head=del_rear(head);
			}
			if(count==index)//找到要删除的元素的位置(2-n-1)
		{
			p->prior->next=p->next;
			p->next->prior=p->prior;
			free(p);
			p=NULL;
		}
		}
	return head;
}
}

2024.2.4_第3张图片 

 

Doublelink update(Doublelink head,int index,datatype element)
{
	Doublelink p=head;
       for(int i=1;inext;
	   }
    p->data=element;
	return head;
}
int find(Doublelink head,datatype key)
{
	Doublelink p=head;
	int flag=0;
	while(p)
	{
		flag++;
		if(p->data==key)
		{
			break;
		}
		p=p->next;
	}
	return flag;
}
			
	



2024.2.4_第4张图片 2024.2.4_第5张图片

栈和队列的区别:栈是先进后出,可以在一端进行操作,逻辑连续物理不一定连续,队列是先进先出,在两端操作,内存连续

内存泄漏:在释放的时候,指针没有指向首地址而是指向了中间的某一块地址 

你可能感兴趣的:(javascript,前端,html)