双链表的插入删除

Posted -slz-2

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了双链表的插入删除相关的知识,希望对你有一定的参考价值。

#include<stdio.h>
#include<malloc.h>
typedef char ElemType;
typedef struct DNode
{
	ElemType data;
	struct DNode *prior;
	struct DNode *next;
}DNode,*DLinkList;
DLinkList DLinkList_Init(DLinkList &L)		//初始化双链表
{
	L=(DNode*)malloc(sizeof(DNode));
	if(L==NULL)
		return false;
	L->prior=NULL;
	L->next=NULL;
	return L;
}
bool DLinkList_Insert(DLinkList &L,int i,ElemType e)	//双链表的插入
{
	if(i<0)
		return false;
	DNode *s,*p=L;
	int j=0;
	while(j	<i-1 && p!=NULL)		//找到第i-1个节点
	{
		p=p->next;
		j++;
	}
	if(p==NULL)
		return false;
	s=(DNode*)malloc(sizeof(DNode));
	s->data=e;
	s->next=p->next;
	if(p->next!=NULL)		//判断空指针
		p->next->prior=s;
	s->prior=p;
	p->next=s;
	return true;
}
bool DLinkList_Delete(DLinkList &L,int i)
{
	if(i<0)
		return false;
	DNode *p=L,*q=L->next;
	int j=0;
	while(j<i-1 && p!=NULL)		//找到第i-1个节点
	{
		p=p->next;
		q=p->next;
		j++;
	}
	if(p==NULL)
		return false;
	p->next=q->next;		
	if(q->next!=NULL)		//判断空指针
		q->next->prior=p;
	free(q);
	return true;
}
bool DLinkList_Print(DLinkList L)
{
	if(L==NULL)
		return false;
	DNode *p=L->next;
	while(p!=NULL)
	{
		printf("%c	",p->data);
		p=p->next;
	}
	return true;
}
void main()
{
	DNode *L;
	DLinkList_Init(L);
	DLinkList_Insert(L,1,‘a‘);
	DLinkList_Insert(L,2,‘b‘);
	DLinkList_Insert(L,3,‘c‘);
	DLinkList_Insert(L,4,‘d‘);
	DLinkList_Print(L);
	printf("
***************
");
	DLinkList_Delete(L,2);
	DLinkList_Print(L);
	printf("
***************
");
}

  

以上是关于双链表的插入删除的主要内容,如果未能解决你的问题,请参考以下文章

双链表的插入删除

基础数据结构---双链表go语言的代码实现

基础数据结构---双链表go语言的代码实现

具有O插入和删除的双链表的紧凑多数组实现

双链表的实现

有序的双链表的实现