Java 循环列表中4个整数的排序集
我正在玩循环链表,用它来表示多项式 以下是我到目前为止的情况: 多项式部分的类别:Java 循环列表中4个整数的排序集,java,singly-linked-list,circular-list,Java,Singly Linked List,Circular List,我正在玩循环链表,用它来表示多项式 以下是我到目前为止的情况: 多项式部分的类别: public class Wielomian { int wsp; int a; int b; int c; public Wielomian(){ wsp=0; a=-1; b=-1; c=-1; } public Wielomian(int wsp, int a, int b, int c){ this.wsp = wsp; this.a = a; t
public class Wielomian {
int wsp;
int a;
int b;
int c;
public Wielomian(){
wsp=0;
a=-1;
b=-1;
c=-1;
}
public Wielomian(int wsp, int a, int b, int c){
this.wsp = wsp;
this.a = a;
this.b = b;
this.c = c;
}
public String toString(){
return wsp+"(x^"+a+")(y^"+b+")(z^"+c+")";
}
}
wsp是系数,a、b、c是x、y和z的指数
节点:
public class Node {
protected Object data;
protected Node link;
public Node() {
link = null;
data = 0;
}
public Node(Object d,Node n) {
data = d;
link = n;
}
public void setLink(Node n) {
link = n;
}
public void setData(Object d) {
data = d;
}
public Node getLink() {
return link;
}
public Object getData() {
return data;
}
}
名单:
class linkedList {
protected Node start ;
protected Node end ;
public int size ;
public linkedList() {
start = null;
end = null;
size = 0;
}
public boolean isEmpty() {
return start == null;
}
public int getSize() {
return size;
}
public void insertAtStart(Object val) {
Node nptr = new Node(val,null);
nptr.setLink(start);
if(start == null) {
start = nptr;
nptr.setLink(start);
end = start;
}
else {
end.setLink(nptr);
start = nptr;
}
size++ ;
}
/* Function to insert element at end */
public void insertAtEnd(Object val) {
Node nptr = new Node(val,null);
nptr.setLink(start);
if(start == null) {
start = nptr;
nptr.setLink(start);
end = start;
}
else {
end.setLink(nptr);
end = nptr;
}
size++ ;
}
/* Function to insert element at position */
public void insertAtPos(Object val , int pos) {
Node nptr = new Node(val,null);
Node ptr = start;
pos = pos - 1 ;
for (int i = 1; i < size - 1; i++)
{
if (i == pos)
{
Node tmp = ptr.getLink() ;
ptr.setLink( nptr );
nptr.setLink(tmp);
break;
}
ptr = ptr.getLink();
}
size++ ;
}
/* Function to delete element at position */
public void deleteAtPos(int pos) {
if (size == 1 && pos == 1) {
start = null;
end = null;
size = 0;
return ;
}
if (pos == 1) {
start = start.getLink();
end.setLink(start);
size--;
return ;
}
if (pos == size) {
Node s = start;
Node t = start;
while (s != end) {
t = s;
s = s.getLink();
}
end = t;
end.setLink(start);
size --;
return;
}
Node ptr = start;
pos = pos - 1 ;
for (int i = 1; i < size - 1; i++) {
if (i == pos) {
Node tmp = ptr.getLink();
tmp = tmp.getLink();
ptr.setLink(tmp);
break;
}
ptr = ptr.getLink();
}
size-- ;
}
}
类链接列表{
受保护节点启动;
受保护节点端;
公共整数大小;
公共链接列表(){
start=null;
end=null;
尺寸=0;
}
公共布尔值为空(){
返回start==null;
}
公共int getSize(){
返回大小;
}
public void insertAtStart(对象val){
Node nptr=新节点(val,null);
nptr.setLink(启动);
if(start==null){
启动=nptr;
nptr.setLink(启动);
结束=开始;
}
否则{
结束。设置链接(nptr);
启动=nptr;
}
大小++;
}
/*函数在末尾插入元素*/
公共void insertaden(对象val){
Node nptr=新节点(val,null);
nptr.setLink(启动);
if(start==null){
启动=nptr;
nptr.setLink(启动);
结束=开始;
}
否则{
结束。设置链接(nptr);
结束=nptr;
}
大小++;
}
/*函数在位置插入元素*/
公共void insertapos(对象val,int pos){
Node nptr=新节点(val,null);
节点ptr=开始;
pos=pos-1;
对于(int i=1;i
我意识到我需要另一种加法,在加法的同时对多项式的这些部分进行排序-首先是x的指数,如果2等于,那么就按y的指数,依此类推。
列表的元素将是多项式的一部分,还有一个“头”,它将链接到指数在“x”处最高的部分,多项式的最后一部分将链接到这个“头”,使整个列表循环。头部的系数将分别等于0和-1。但是我不知道如何在不破坏所有链接的情况下实现这种方法。等等。我希望你们能帮助我:)
我还想知道以后显示多项式的最佳方法。是否需要通过多项式的某些部分进行某种形式的迭代,并将它们添加到字符串中,直到我到达“head”?您所需的行为似乎特定于您的列表元素的类
Wielomian
。在这种情况下,您应该直接使用该类,而不是假装列表可以容纳任何对象。还请注意,添加元素时的排序在很大程度上与允许在用户指定的位置添加元素(包括特别在开始或结束处添加)不一致。您应该选择一个:要么列表保持其元素的顺序,要么它们的顺序遵循添加和删除操作的顺序。在前一种情况下,最简单的方法可能是在每次添加时搜索(已排序)列表中的正确位置,并在那里插入新节点(从而保持排序顺序)。我明白你的意思,但将“Object”更改为“Wielomian”不会有问题。然而,我仍然不知道如何实现insert方法来确定多项式的哪一部分应该被添加,或者仅仅是如何对它进行排序。这3个“instertAt”方法是示例方法,事实上,如果我想对这些元素进行排序,我甚至不需要这些方法。我只是不知道如何对链接列表中的元素进行排序。我已经告诉过你:你不需要在事后进行排序。添加列表时,只需为添加到列表中的每个元素选择正确的位置。假设列表开始排序(对于空列表来说这是非常正确的),那么它也会在每次添加之后(通过在正确位置添加元素的假设方法)和每次删除之后进行排序。