IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 数据结构自学篇(五)链表的应用 -> 正文阅读

[数据结构与算法]数据结构自学篇(五)链表的应用

2.3.5链表合并一元多项式相加

例题:两个有序链表La和Lb合并作为一个有序链表

将两个有序链表La和Lb合并作为一个有序链表
算法思路:
设合并后的链表为Lc,无需为Lc分配新的存储空间,可以直接利用两个链表中原有的结点来链接成一个新表.
设立三个指针pa,pb,pc,其中pa和pb分别指向La和Lb中待比较插入的结点,而pc指向Lc表中当前最后一个结点,若pa.data<pb.data,则将所有pa所指结点链接到pc所指结点之后,否则将pb所指结点链接到pc所指结点之后.
对两个链表的结点进行逐次比较时,可将循环的条件设为pa和pb皆为非空,当其中一个为空时,说明有一个表的元素已经归并完,则只需将另一个表的剩余段链接到pc所指结点之后即可.

public class mergeList {
	public static <T extends Comparable> void MergeList_L(linkList<T> La,linkList<T> Lb,linkList<T> Lc) {
		Node <T> pa,pb,pc;
		pa=La.getHead().next;
		pb=Lb.getHead().next;
		pc=Lc.getHead();
		while(pa!=null && pb!=null) {
			if(pa.data.compareTo(pb.data)<=0) {
				pc.next=pa;
				pc=pa;
				pa=pa.next;
			}
			else {
				pc.next=pb;
				pc=pb;
				pb=pb.next;
			}
		}
		while(pa!=null) {
			pc.next=pa;
			pc=pa;
			pa=pa.next;
		}
		while(pb!=null) {
			pc.next=pb;
			pc=pb;
			pb=pb.next;
		}
		La.clear();
		Lb.clear();
	}
}
	public static void main(String[] args) {
		int i,j,k=0;
		int[] a= {12,23,35,49,56};
		int[] b= {10,15,20};
		linkList<Integer> La=new linkList<Integer>();
		linkList<Integer> Lb=new linkList<Integer>();
		linkList<Integer> Lc=new linkList<Integer>();
		for(i=0;i<a.length;i++)
			La.add(a[i], i+1);
		for(j=0;j<b.length;j++)
			Lb.add(b[j], j+1);
		MergeList_L(La,Lb,Lc);
			Lc.nextOrder();
	}

例题:一元多项式相加

用一个长度为m且每个元素有两个数据项(系数和指数项)的线性表
((p1,e1).(p2,e2)…(pm,em))
便可以确定唯一多项式pn(x).该线性表中元素类型定义为Item类:

public class Item implements Comparable<Item> {	
	private double coef;
	private int exp;
	public Item(double c,int e) {
		coef=c;
		exp=e;
	}
	public double GetCoef() {
		return coef;
	}
	public int GetExp() {
		return exp;
	}
	
	public void Add(Item x) {
		if(exp==x.exp) {
			coef=coef+x.coef;
		}
	}
	public String toString() {
		return String.valueOf(coef)+"x^"+exp;
	}
	public int compareTo(Item other) {
		if(exp>other.exp)
			return 1;
		else if(exp<other.exp)
			return -1;
		else
			return 0;
	}
}

第一一元多项式也可以采用顺序表和链表两种存储结构,在实际应用中选取哪一种,则要是多项式做何种运算而定.若只是对多项式进行求值等不改变多项式系数和指数的运算,则可以采用类似于顺序表的存储结构,否则采用链式存储结构.
如下讨论,如何利用多链表来实现一元多项式的运算.

算法思路:每个结点中设置三个域,分别存储系数项,指数项和下一结点的指针,根据一元多项式的运算规则,若指数项相等,则系数相加,若指数项不等,则分别按照指数想大小的次序写到多项式中.基本算法可以描述如下,从表A和B的第一个元素位置开始.

(1)若A和B都未处理完时,对当前未知元素进行比较,分以下两种情况:
a:若指数项相等,则对应系数相加,和不为零时,放入和多项式的表C中,表A和B的位置同时后移,重复操作;
b:若指数项不等,将较小的元素放入和多项式表C中,并后移该表中元素的比较位置,重复操作.

(2)表A和B之一已处理完时,将未处理完表的剩余元素依次放入到表C中
算法描述如下:

	static <T extends Item> linkList<T> polyAdd(linkList<T> b1,linkList<T> b2){
		{
			linkList<T> b3=new linkList<T>();
			int i1=1,i2=1;
			while (i1<=b1.size()&&i2<=b2.size()) {
				T x1=b1.value(i1),x2=b2.value(i2);
				if(x1.compareTo(x2)<0) {
					b3.add(x1, b3.size()+1);
					i1++;
				}
				else if(x1.compareTo(x2)>0) {
					b3.add(x2, b3.size()+1);
					i2++;
				}
				else {
					double y=x1.GetCoef()+x2.GetCoef();
					if(Math.abs(y)>1.0E-6) {
						x1.Add(x2);
						b3.add(x1, b3.size()+1);
					}
					i1++;
					i2++;
				}
			}
			while(i1<=b1.size()) {
				b3.add(b1.value(i1),b3.size()+1);
				i1++;
			}	
			while(i2<=b2.size()) {
				b3.add(b2.value(i2), b3.size()+1);
				i2++;
			}
			return b3;
		}
	}
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-12-05 12:17:23  更:2021-12-05 12:18:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 15:00:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码