双链表的插入删除

#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("\n***************\n");
	DLinkList_Delete(L,2);
	DLinkList_Print(L);
	printf("\n***************\n");
}

  

posted @ 2020-06-19 20:01  石乐智先生  阅读(206)  评论(0编辑  收藏  举报