C语言 构造双循环链表 正向输出和反向输出

前言

双循环链表是指,每个结点都有指向下一个结点的指针和指向前一个结点的指针。同时,尾结点的next域指向头结点,头结点的prior域指向尾结点。

C语言代码实现

#include 
#include 

typedef struct DoubleCirNode{
     
	int data;
	struct DoubleCirNode *next;
	struct DoubleCirNode *prior;
}DoubleCirNode,*DCList;
// 创建双循环链表—用户输入 
DCList createDCList()
{
     
	int tmp = 0;
	// 创建双循环链表 
	DCList dcl = (DCList)malloc(sizeof(DoubleCirNode)) ;
	// 尾指针 
	DoubleCirNode *r = dcl;
	scanf("%d",&tmp);
	while(tmp!=-99999)
	{
     
		DoubleCirNode *dcn = (DoubleCirNode*)malloc(sizeof(DoubleCirNode));
		dcn->data = tmp;
		// 尾指针的后缀指针指向头结点
		r->next = dcn;
		// 头结点的前缀设置为尾指针
		dcn->prior = r;
		r = dcn;
		
		scanf("%d",&tmp);
	}
	r->next = dcl;
	dcl->prior = r;
	return dcl;
}
int main(int argc, char** argv) {
     
	
	DCList dcl = createDCList();
	DoubleCirNode *p = dcl->next;
	
	// 正向输出 
	while(p->next!=dcl->next)
	{
     
		printf("%d ",p->data);
		p = p->next;
	}
	printf("\n");
	// 反向输出
	p = dcl ->prior;
	while(p->prior!=dcl->prior)
	{
     
		printf("%d ",p->data);
		p = p->prior;
	}
	return 0;
}

C语言 构造双循环链表 正向输出和反向输出_第1张图片

你可能感兴趣的:(C语言,链表,c语言,单链表,算法,指针)