首页 > 其他 > 详细

循环双链表

时间:2019-04-18 01:10:05      阅读:165      评论:0      收藏:0      [点我收藏+]

include<stdio.h>

include<stdlib.h>

define a 5

typedef struct node{
int data;
struct node rlink,llink;
}linknode,*linklist;

void create (linklist &first){ //创建赋值
int b[a];
first=(linknode)malloc(sizeof(linknode));
first->rlink=first;
first->llink=first;
linknode
s,q,r=first;
printf("请输入数据:");
for(int i=0;i<a;i++){
scanf("%d",&b[i]);
}
for(int i=0;i<a;i++){
s= (linknode*)malloc(sizeof(linknode));
s->data=b[i];
q=r->rlink;
s->llink=r;
q->llink=s;
r->rlink=s;s->rlink=q;
r=s;
}
}

void printlist(linklist first){ //输出
linklist p;
p=first->rlink;
printf("请输出数据:");
while(p!=first){
printf("%d",p->data);
p=p->rlink;
if(p!=first)
printf(" ");
}
printf("\n");
}

void search(linklist first){ //查找元素 ,得到元素地址
int c;
linklist p;
printf("请问要查找的元素是:");
scanf("%d",&c);
p=first->rlink;
while(p!=first&&p->data!=c){
p=p->rlink;
}
if(p!=first){
printf("要查找的元素的地址是:%d\n",p);
}
else printf("没有找到这个元素!");
}

void locate(linklist first){ //找到元素数据
linklist p;
int c;
printf("请问要查找的第几个元素是:");
scanf("%d",&c);
if(c<0){
printf("不符合条件!");
return;
}
p=first->rlink;
for(int i=1;i<c;i++){
if(p==first){
break;
}else p=p->rlink;
}
printf("这个元素是:");
printf("%d\n",p->data);
}

linklist located(linklist first,int b){ //找到第几个元素指针
int k=1;
linklist p;
if(b==0)
return first;
p=first->rlink;
while(k<b){
p=p->rlink;
k++;
}
return p;
}

void remove(linklist first){
int c,b;
linknode p,pre;
printf("请问要删除第几个元素:");
scanf("%d",&c);
pre=located(first,c-1);
p=pre->rlink;
printf("请输出要删除的元素:");
printf("%d\n",p->data);
if(p==NULL) return;
p->rlink->llink=pre;
pre->rlink=p->rlink;
free(p);
return;
}

void insert(linklist first){
int i,j;
linknode p,s;
printf("请问要在第几个位置插入元素:");
scanf("%d",&i);
printf("\n");
printf("请问要插入的元素是:");
scanf("%d",&j);
printf("\n");
s=(linknode*)malloc(sizeof(linknode));
if(s==NULL){
printf("存储分配失败!\n");
exit(1); }
p=located(first,i-1);
if(p==first) return;
s->data=j;
s->rlink=p->rlink;
p->rlink=s;
s->rlink->llink=s;
s->llink=p;
}

int main(){
linklist L;
create (L);
printlist(L);
search(L);
locate(L);
remove(L);
printlist(L);
insert(L);
printlist(L);
return 0;
}

技术分享图片

循环双链表

原文:https://www.cnblogs.com/lusilin/p/10726996.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!