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

📄 doublechain.txt

📁 两列双向链表相同值查询设计: 实现内容:构建两个双向链表
💻 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 + -