📄 双向链表.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 + -