⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 双向链表.txt

📁 线性表的链式存储结构、线性表的顺序存储结构、循环链表等源程序。
💻 TXT
字号:
#include"stdio.h"
#include"stdlib.h"

typedef struct lnode{
	float data;
	struct lnode *prior;
	struct lnode *next;
}*dublinklist;

void initlist(dublinklist &l){
	l=(dublinklist)malloc(sizeof(lnode));
	l->prior=NULL;
	l->next=NULL;
}//对双线新链表进行初始化

void creatlist(dublinklist &l){
	dublinklist p;
	initlist(p);
	initlist(l);
	l->data=0;
	p=l;
	l=(dublinklist)malloc(sizeof(lnode));
	printf("请输入数据元素(以一个小于0的数结尾):");
	scanf("%f",&l->data);
	p->next=l;
	l->prior=p;
	while(l->data>0){
		p=l;
		l=(dublinklist)malloc(sizeof(lnode));
		scanf("%f",&l->data);
		p->next=l;
		l->prior=p;
	}
}

void destroylist(dublinklist &l){
	free(l);
}//销毁链表

void clearlist(dublinklist &l){
	dublinklist p=l;
	while(p->data>0)
		p=p->prior;
	p->next=l;
	l->prior=p;
}//清空链表

bool listend(dublinklist l,dublinklist p){
	if(p->next=NULL||p->prior==NULL)
		return true;
	else
		return false;
}//如果p的前驱或者后继为空,则表示该数据项已经达到末尾

bool listempty(dublinklist l){
	if(l->prior->data==0)
		return true;
	else
		return false;
}//判断双线性链表是否为空,为空时返回true,不为空时,返回false

int listlength(dublinklist l){
	int i=0;
	dublinklist p=l;
	while(p->prior->data>0){
		i++;
		p=p->prior;
	}
	return i;
}//获取链表的长度

float getelem(dublinklist l,int i,float e){
	dublinklist p=l;
	int len=listlength(l);
	int k;
	for(k=0;k<len-i+1;k++)
		p=p->prior;
	e=p->data;
	return e;
}//获取链表中第i个元素,并以e返回其值

void  listinsert(dublinklist &l,int i,float e){
	dublinklist p=l;
	dublinklist mid;
	int len=listlength(l);//保存链表的长度
	int k;//循环控制变量
	mid=(dublinklist)malloc(sizeof(lnode));
	mid->data=e;
	for(k=0;k<len-i+1;k++)
		p=p->prior;
	mid->prior=p->prior;
	p->prior->next=mid;
	mid->next=p;
	p->prior=mid;
}//在链表的第i个数据元素的前面插入元素e

void listdelete(dublinklist &l,int i,float e){
	int len=listlength(l);
	int k;
	dublinklist p=l;
	for(k=0;k<len-i+1;k++)
		p=p->prior;
	e=p->data;
	p->prior->next=p->next;
	p->next->prior=p->prior;
}//删除链表中的第i个元素,(并以e返回其值,此算法并没有返回e值)

float priorelem(dublinklist l,dublinklist p,float e){
	if(!p->prior)
		printf("该数据项没有前驱?");
	else
		e=p->prior->data;
	return e;
}//返回链表中p的前驱,由e返回其值

float nextelem(dublinklist l,dublinklist p,float e){
	if(!p->next)
		printf("该数据项没有后继?");
	else
		e=p->next->data;
	return e;
}//返回链表中p的后继,由e返回其值

void main(){
	//dublinklist p;
	dublinklist l;
	//float e;
	initlist(l);
	creatlist(l);
	//p=l;
	/*while(p->prior->data>0)
		p=p->prior;
	printf("%6.2f\n",priorelem(l,p->prior,e));
	/*listdelete(l,2,e);
	printf("链表删除第二个数据后变为:\n");
	while(p->prior->data>0){
		printf("%6.2f\n",p->prior->data);
		p=p->prior;
	}
	//printf("链表的第二个元素为:%6.2f\n",getelem(l,2,e));
	//p=l;
	/*listinsert(l,2,6.3);
	printf("插入元素以后链表变为:\n");
	while(p->prior->data>0){
		printf("%6.2f\n",p->prior->data);
		p=p->prior;
	}*/
	/*clearlist(l);
	if(listempty(l))
		printf("双线性链表为空?\n");*/
	//destroylist(l);
	//printf("双向链表的长度为:%d\n",listlength(l));
	//printf("%6.2f\n",l->prior->data);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -