📄 doublechain.txt
字号:
#include<stdio.h>
#include<malloc.h>
typedef struct Lnode{
int bianhao;
int shuzhi;
struct Lnode *next;
struct Lnode *prior;
}*Link; //用了编号和数值两个数据,数值用来存放输入的要比较的数,二编号则是方便查找
typedef struct{
int bianhao;
int shuzhi;
}Elemtype;
Link Makenode(Elemtype e){
Link p;
p=(Link)malloc(sizeof(Lnode));
p->shuzhi=e.shuzhi;
p->bianhao=e.bianhao;
p->next=NULL;
return(p);
} //构造新结点
Link Initlist( ){
Link p;
p=(Link)malloc(sizeof(Lnode));
p->shuzhi=0;
p->bianhao=0;
p->next=NULL;
return(p);
} //构造头结点。注意,头节点的数值和编号都是0,不参与比较。
void Insfirst(Link h,Link s){
s->next=h->next;
h->next=s;
s->prior=h;
} //在h后插入s
int Locatelem(Link q,Link e,int tem)
{
int i=1;
while(i!=tem&&q->next&&q->next->shuzhi!=e->shuzhi)
{
i++;
q=q->next;
}
if(!q->next) return 0;
if(q->next->shuzhi==e->shuzhi) return (q->next->bianhao);
else return 0;
} //比较链表B中是否存在要找的数值。若有返回其编号,否则返回0
void Printlink(Link l,int m)
{
Link p=l->next;
int i;
for(i=1;i<=m&&p!=NULL;i++)
{
printf("编号%d,数值%d\n",p->bianhao,p->shuzhi);
p=p->next;
}
} //输出链表,目的是检查输入是否正确
Link Creatlink(int m)
{ //m为链表长度
Link p,h,r;
int i;
Elemtype e;
h=Initlist();
p=h; r=h;
p=p->next;
printf("请输入数据,包括节点编号和节点数值,编号请按顺序从1开始,到m截止。\n");
for(i=1;i<=m;i++)
{
printf("编号,数值:");
scanf("%d %d",&e.bianhao,&e.shuzhi);
p=Makenode(e);
Insfirst(r,p);
r=p;
}
h->prior=p;
p->next=h;
return(h);
} //Creatlink 创建链表
void main(){
int m,n;
int tem,i;
Link pa,pb,p,q;
printf("第一步:创建链表A,请输入链表A的长度\n");
scanf("%d",&m);
pa=Creatlink(m);
printf("链表A为:\n");
Printlink(pa,m);
printf("第二步:创建链表B,请输入链表B的长度\n");
scanf("%d",&n);
pb=Creatlink(n);
printf("链表B为:\n");
Printlink(pb,n);
printf("第三步:请输入所要查找的链表A元素的编号(应小于m值)。如果要停止程序,请输入0\n");
scanf("%d",&tem);
while(tem!=0) //实现人机对话以及多次查找
{
if(tem>m)
{
printf("输入错误!\n");
goto end;
}
else
{
p=pa;
for(i=0;i<=tem;i++)
{
q=p;
p=p->next;
}
printf("The number wanted to find is %d(N.O) %d\n", q->shuzhi,q->bianhao);
i=Locatelem(pb,q,n);
if(i!=0)
printf("Found it!Its location in linkB is N.O %d\n",i);
else
printf("There is no such number in the linkB .\n");
end: printf("请输入所要查找的链表A元素的编号(应小于m值)。如果要停止程序,请输入0\n");
scanf("%d",&tem);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -