首页 > 代码库 > 双向链表的初始化,建立,添加节点和删除节点(注意插入和删除要分三种情况)

双向链表的初始化,建立,添加节点和删除节点(注意插入和删除要分三种情况)

/*双向循环链表*/
#include "declaration.h"
typedef struct DulNode
{
	int data;
	struct DulNode *next,*prior;
}DulNode,*DulLinkList;


Status InitList_DUL(DulLinkList &L)//初始化一个带头结点的双向循环链表,ok   
{
	L=(DulNode*)malloc(sizeof(DulNode)); 
	L->next=L;
	L->prior=L;
	if (!L) 
		exit(OVERFLOW);
	return OK;
}

void DestoryList_DUL(DulLinkList &L)//销毁一个带头结点的双向循环链表,ok
{
  DulNode *p;
  while(L)
  {  
	  p=L->next; 
	  free( L);
	  L=p;
  }
}



void CreateList_DUL(DulLinkList &L)//正序创建一个带头结点的双向循环链表,ok
{	
	DulLinkList p,s;//中间变量
	int n,i;
	printf("input Length: \n");
	scanf("%d",&n);
	p=L;
	printf("input value with enter:");
    for(i=n;i>0;i--)
	{		
		s=(DulLinkList)malloc(sizeof(DulNode));
		scanf("%d",&s->data);
		p->next=s;
		s->prior=p;
		p=s;
	}
	p->next=L;
	L->prior=p;
}



DulLinkList LocateELem_DUL(DulLinkList L,ElemType x)   
{//定位值为e的结点的位置
  DulNode *p;
  p=L->next;
  while(p!=L)
  {
	  	if(!compare(x,p->data))
			return p;
		p=p->next;
  }
  printf("the element is not exists\n");
  return NULL;
}


Status InsertAfter_DUL(DulLinkList &L,ElemType y)//在带头结点的双向循环链表中的x值后插入y值,李大友2.15
{      
	DulLinkList p,s;
	ElemType x;
	printf("value you want to find is :");
	scanf("%d",&x);
    p=LocateELem_DUL(L,x);
	if(!p)
	{
		printf("%d not exists.\n",x);
		return ERROR;
	}
	s=(DulLinkList)malloc(sizeof(DulNode));
	s->data=http://www.mamicode.com/y;>


删除操作借鉴了:

zz198808 的博客 http://blog.csdn.net/zz198808/article/details/7934427,在此表示感谢


双向链表的初始化,建立,添加节点和删除节点(注意插入和删除要分三种情况)