码迷,mamicode.com
首页 > 其他好文 > 详细

双链表的插入删除

时间:2020-06-19 21:12:34      阅读:57      评论:0      收藏:0      [点我收藏+]

标签:插入   next   ++   ini   return   lse   ext   free   arp   

#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");
}

  

双链表的插入删除

标签:插入   next   ++   ini   return   lse   ext   free   arp   

原文地址:https://www.cnblogs.com/-slz-2/p/13166243.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!