【数据结构】 双循环链表代码演示

#include <stdio.h>
#include <stdlib.h>

typedef struct Data
{
	Data *prior;    // 前驱指针
	Data *next;     // 后继指针
	int elem;       // 数据元素
}DoubleLinked,*PDoubleLinked;

void DisDoubleLinked(PDoubleLinked L);
void InsertDoubleLinked(PDoubleLinked L,int index,int elem);
void DeleteDoubleLinked(PDoubleLinked L,int index);
void ModifyDoubleLinked(PDoubleLinked L,int index,int elem);

void main()
{
	PDoubleLinked L,P,Q;
	int size = 0;

	/**先初始化在使用*/
	L = (PDoubleLinked)malloc(sizeof(DoubleLinked));

	// 两种策略 
	// 一  用到的时候再申请
	// 二  先申请 一大段 不够的时候再申请
	P = L;
	L->prior = NULL;

	printf("请输入双链表的大小:");
	scanf("%d",&size);

	while (size-- != 0)
	{
		P->next = (PDoubleLinked)malloc(sizeof(DoubleLinked));
		Q = P;
		P = P->next;
		P->prior = Q;
		P->next = NULL;
		P->elem = size*2+1;
	}
	P->next = L;
	L->prior = P;    // 循环表头

	// 显示双链表
	DisDoubleLinked(L);
	// 增
	InsertDoubleLinked(L,2,23);
	printf("\n");
	DisDoubleLinked(L);
	printf("\n");
	// 删
	DeleteDoubleLinked(L,3);
	DisDoubleLinked(L);
	printf("\n");
	// 改
	ModifyDoubleLinked(L,3,521);
	DisDoubleLinked(L);
	printf("\n");
}


void DisDoubleLinked(PDoubleLinked L)
{
	PDoubleLinked P = L->next;

	while (P != L)   // P != L 的时候循环进行
	{
		printf("%d\t",P->elem);
		P = P->next;
	}
}

void InsertDoubleLinked(PDoubleLinked L,int index,int elem)
{
	PDoubleLinked P = L;
	PDoubleLinked T;
	PDoubleLinked Q = (PDoubleLinked)malloc(sizeof(DoubleLinked));
	Q->elem = elem;

	while (--index != 0)
	{
		P = P->next;
	}
	T = P->next;

	Q->prior = P;
	Q->next = T;

	P->next = Q;
	Q->next = T;
}

void DeleteDoubleLinked(PDoubleLinked L,int index)
{
	PDoubleLinked P = L;
	PDoubleLinked Q;

	while (--index != 0)
	{
		P = P->next;
	}

	Q = P->next;
	P->next = Q->next;
	Q->next->prior = P;
	free(Q);
}

void ModifyDoubleLinked(PDoubleLinked L,int index,int elem)
{
	PDoubleLinked P = L;

	while (index-- != 0)
	{
		P = P->next;
	}

	P->elem = elem;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值