数据结构实验(保存起来过两天写实验报告) 链表的合并

huangjing

链表的合并,要求O(la*lb)的复杂度,实际上就是插入什么的,注意如果在链表开头和结尾的特殊情况

代码

#include<cstdio>
#include<cstring>
#include<cstdlib>

typedef struct node
{
	int data;
	struct node *next;
}Node,*listnode;

int lena,lenb;

void creatlist(listnode &head,int flag)
{
	int x=1;
	listnode p,xx;
    head->next=NULL;
	xx=head;
	while(x!=0)
	{
		p=(listnode)malloc(sizeof(struct node));
        scanf("%d",&x);
		if(x==0)  break;
		if(flag)
			lena++;
		else
			lenb++;
		p->data=x;
		p->next=NULL;
		xx->next=p;
		xx=p;
	}
}//创建链表

void forlist(listnode &head)
{
    listnode p;
	p=head->next;
	while(p!=NULL)
	{
        printf("%d ",p->data);
		p=p->next;
	}
}//遍历链表

void Insert(listnode &la,int val)
{
	listnode p,last,cur;
	p=la->next;
	last=p;
	cur=(listnode)malloc(sizeof(node));
    cur->data=val;
    if(p->data>val)
    {
       cur->next=p;
       la->next=cur;
       return;
    }
	while(p->data<val)
	{
		last=p;
		p=p->next;
		if(p==NULL)  break;
	}
    cur->next=p;
    last->next=cur;
}

void unionlist(listnode &la,listnode &lb)
{
	int flag;
	listnode xx,yy;
	yy=lb->next;
    for(int i=1;i<=lenb;i++)
	{
		flag=0;
        int key=yy->data;
		yy=yy->next;
		xx=la->next;
		for(int j=1;j<=lena;j++)
		{
			if(xx->data==key)
			 {
				 flag=1;
				 break;
			 }
			 else
				 xx=xx->next;
		}
		if(!flag)
		{
			Insert(la,key);
			lena++;
		}
	}
}//合并链表

int main()
{
	lena=lenb=0;
    listnode heada,headb;
	heada=(listnode)malloc(sizeof(struct node));
    headb=(listnode)malloc(sizeof(struct node));
	creatlist(heada,1);
	creatlist(headb,0);
	printf("链表la长度 lb长度:%d %d\n",lena,lenb);
	printf("链表ha为");
	forlist(heada);
	printf("\n");
	printf("链表hb为");
	forlist(headb);
	printf("\n");
    unionlist(heada,headb);
	printf("合并后的链表:\n");
    forlist(heada);
    printf("\n");
	forlist(headb);
	return 0;
}

/*
3 4 6 18  0
2 3 5 6 7 19 20 0
*/
时间: 2024-10-27 11:30:43

数据结构实验(保存起来过两天写实验报告) 链表的合并的相关文章

合并两个有序的单链表,合并之后的链表依然有序【出现频率高】

合并两个有序的单链表,合并之后的链表依然有序: 这道题经常被各公司考察. 例如: 链表1:   1->2->3->4 链表2:   2->3->4->5 合并后:   1->2->2->3->3->4->4->5 解题思路:   挨着比较链表1和链表2.   这个类似于归并排序.尤其要注意两个链表都为空.和其中一个为空的情况.只需要O (1) 的空间.时间复杂度为O (max(len1,len2)) public Node me

Leetcode21---&gt;Merge Two Sorted Lists(合并两个排序的单链表)

题目: 给出两个排序的单链表,合并两个单链表,返回合并后的结果: 解题思路: 解法还是很简单的,但是需要注意以下几点: 1.  如果两个链表都空,则返回null; 2.  如果链表1空,则返回链表2的头节点:反之,如果链表2为空,则返回链表1的头节点: 3.  两个链表都不空的情况下: 比较两个链表的头节点的值,哪个小,则新链表的头节点为哪个: 举例:l1: 1->3->5; l2:2->4->6->7;则:head = l1的头节点,此时head.next = l1.nex

合并两个排序的单链表

[题目] 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是依照递增排序的. [分析] 合并单链表,须要找到头结点,对照两个链表头结点后,确定头结点,再确定头结点下一个结点,循环递归的如前面一样操作确定每一个结点位置,同一时候考虑边界条件,假设两个链表为空.则肯定无需合并了,就是空链表,假设一个链表为空,还有一个不为空,则返回不为空的链表.详细分析流程能够看以下的样例: [測试代码] #include<stdio.h> #include<stdlib.h> #inclu

MySQL 基础知识梳理学习(五)----详解MySQL两次写的设计及实现

一 . 两次写提出的背景或要解决的问题 两次写(InnoDB Double Write)是Innodb中很独特的一个功能点.因为Innodb中的日志是逻辑的,所谓逻辑就是比如插入一条记录时,它可能会在某一个页面(这条记录最终被插入的位置)的多个偏移位置写入某个长度的值,例如页头的记录数.槽数.页尾槽数据.页中的记录值等.这些本是一些物理操作,而Innodb为了节省日志量及其它原因,设计为逻辑处理的方式,即在一个页面上插入一条记录时,对应的日志内容包括表空间号.页面号.将被记录的各个列的值等内容,

csdn肿么了,这两天写的博文都是待审核

昨天早上8点写了一篇博文,然后点击发表,结果系统显示"待审核".于是仅仅好qq联系csdn的客服,等到9点时候,csdn的客服上线了,然后回复说是链接达到5个以上须要审核,于是回到博文细致审查,没有超过.然后客户又说到可能链接的网址在黑名单,我查看了下,确实有一个链接是英文技术文章的链接,国外的网址,我懂了,我也信服了.于是继续接着等,客户说上班时间半个小时后应该能够完毕审核.然后干了一段活后,楸了一下博文,果然审核通过. 以为故事到此就结束了,结果今天早上刚发一个博文,仍然是待审核.

【InnoDB】插入缓存,两次写,自适应hash索引

InnoDB存储引擎的关键特性包括插入缓冲.两次写(double write).自适应哈希索引(adaptive hash index).这些特性为InnoDB存储引擎带来了更好的性能和更高的可靠性. 插入缓冲 插入缓冲是InnoDB存储引擎关键特性中最令人激动的.不过,这个名字可能会让人认为插入缓冲是缓冲池中的一个部分.其实不然,InnoDB缓冲池中有Insert Buffer信息固然不错,但是Insert Buffer和数据页一样,也是物理页的一个组成部分. 主键是行唯一的标识符,在应用程序

C/C++,数据结构实现两个链表的合并(尾插法建立单链表,求链表长度,直接插入排序)

1题目 实现两个链表的合并 2基本功能要求: 1.建立两个链表A和B,链表元素个数分别为m和n个. 2.假设元素分别为(x1,x2,-xm),和(y1,y2, -yn).把它们合并成一个线性表C,使得: 当m>=n时,C=x1,y1,x2,y2,-xn,yn,-,xm 当n>m时,C=y1,x1,y2,x2,-ym,xm,-,yn 3.输出线性表C: 用直接插入排序法对C进行升序排序,生成链表D,并输出链表D. 3测试数据: (1)A表(30,41,15,12,56,80) B表(23,56,

实验三 敏捷开发与XP实践 实验报告

课程:Java程序设计实验   班级:1353  姓名:余佳源  学号:20135321 成绩:                           指导教师:娄嘉鹏      实验日期:2015.6.4 实验密级:无            预习程度:                   实验时间:15:30~18:00 仪器组次:  21                    必修/选修: 选修                  实验序号:3 实验名称:敏捷开发与XP实践 实验内容 1. XP

实验四 图的实现和应用 实验报告 20162305

实验四 图的实现和应用 实验报告 20162305 实验一 邻接矩阵实现无向图 实验要求 用邻接矩阵实现无向图(边和顶点都要保存),实现在包含添加和删除结点的方法,添加和删除边的方法,size(),isEmpty(),广度优先迭代器,深度优先迭代器.给出伪代码,产品代码,测试代码(不少于5条测试) 实验过程 用邻接矩阵表示无向图,首先我们先明确什么是邻接矩阵.邻接矩阵就是用矩阵的方式来表示不同结点之间的关系,对于无向图来说,如果结点(i,j)之间有联系,则在矩阵中(i,j)所对应的的点的值为1,