双向循环链表的基本操作(创建节点,头插,头删,尾插,尾删)

双向循环链表的基本操作(创建节点,头插,头删,尾插,尾删)_第1张图片

头定义:

typedef char datatype[20];//datatype==char[20]
typedef struct Node
{
	//数据域 数据元素
	datatype data;
	//指针域 下一个节点地址
	struct Node* next;
	//指针域 上一个节点地址
	struct Node* prev;
}*DoubleLink;

创建链表节点:

DoubleLink create_node()//创建链表
{
	DoubleLink node=(DoubleLink)malloc(sizeof(struct Node));
	if(NULL==node)
		return NULL;
	//对新节点的数据域初始化
	strcpy(node->data,"");
	//对指针域赋值 NULL
	node->next=node->prev=node;
	return node;
}

节点的头插:

双向循环链表的基本操作(创建节点,头插,头删,尾插,尾删)_第2张图片

 

DoubleLink insert_head(datatype e,DoubleLink L)//头插
{
	DoubleLink s=create_node();
	if(NULL==s)
		return L;
	strcpy(s->data,e);
	DoubleLink rear;
	if(NULL!=L)
	{
		rear=L->prev;
		s->next=L;
		L->prev=s;
		rear->next=s;
		s->prev=rear;
	}
	L=s;
	return L;
}

节点的尾插:

 双向循环链表的基本操作(创建节点,头插,头删,尾插,尾删)_第3张图片

 

DoubleLink insert_rear(DoubleLink L,datatype e)//尾插
{
	//创建新节点s
	DoubleLink s=create_node();
	if(NULL==s)
		return L;
	strcpy(s->data,e);
	//链表为空
	if(NULL==L)
	{
		L=s;
		return L;
	}
	DoubleLink rear=L->prev;
	rear->next=s;
	s->next=L;
	L->prev=s;
	s->prev=rear;
	return L;
}

节点的头删:

双向循环链表的基本操作(创建节点,头插,头删,尾插,尾删)_第4张图片

 

DoubleLink delete_head(DoubleLink L)//头删
{
	if(L==NULL)
		return L;
	if(L->next==L)
	{
		free(L);
		L=NULL;
		return L;
	}
	DoubleLink q=L->next;
	strcpy(L->data,q->data);
	L->next=q->next;
	q->next->prev=L;
	free(q);
	q=NULL;
	return L;
}

节点的尾删:

双向循环链表的基本操作(创建节点,头插,头删,尾插,尾删)_第5张图片

 

DoubleLink delete_rear(DoubleLink L)//尾删
{
	if(L==NULL)
		return L;
	if(L->next==L)
	{
		free(L);
		L=NULL;
		return L;
	}
	DoubleLink rear=L->prev;
	rear->prev->next=L;
	L->prev=rear->prev;
	free(rear);
	rear=NULL;
	return L;
}

节点的输出(正向遍历和反向遍历):

void output(DoubleLink L)//输出
{
	//判断链表是否为空
	if(NULL==L)
		return;
	//正向遍历
	printf("正向遍历\n");
	DoubleLink p=L;
	while(L->next!=p)
	{
		printf("%s ",L->data);
		L=L->next;
	}
	printf("%s\n",L->data);
	//逆向遍历
	printf("逆向遍历\n");
	while(L!=p)
	{
		printf("%s ",L->data);
		L=L->prev;
	}
	printf("%s",L->data);
	puts("");
}

你可能感兴趣的:(链表,数据结构,c语言,算法)