线性表的顺序存储结构
package 线性表.顺序存储非零项;
import java.util.Arrays;
public class List {
private int[] elements;
private int last;
public List() {
elements=new int[10];
last=-1;
}
public List(int num) {
elements=new int[num];
last=-1;
}
/**
* 清空线性表
* @return
*/
public boolean makeEmpty() {
last=-1;
return true;
}
/**
* 根据索引查找元素
* @param k
* @return
*/
int findKth(int k) {
if(k>last||k<0) {
System.out.println("索引越界");
return -1;
}
return elements[k];
}
/**
* 根据元素查找第一个索引
* @param num
* @return
*/
int find(int num) {
for(int i=0;i<=last;i++) {
if(num==elements[i]) {
return i;
}
}
return -1;
}
/**
* 添加元素
* @param k
* @param index
* @return
*/
public boolean insert(int k,int index) {
if(index<0||index>last+1) {
System.out.println("索引越界");
return false;
}
if(last==elements.length-1) {
System.out.println("表格已满");
return false;
}
last++;
for(int i=last;i>=index+1;i--) {
elements[i]=elements[i-1];
}
elements[index]=k;
return true;
}
/**
* 根据索引删除元素
* @param index
* @return
*/
public boolean delete(int index) {
if(index<0||index>last) {
System.out.println("索引越界");
return false;
}
last--;
for(int i=index;i<=last;i++) {
elements[i]=elements[i+1];
}
return true;
}
/**
* 返回线性表的长度
* @return
*/
int length() {
return elements[length()];
}
@Override
public String toString() {
return "List [elements=" + Arrays.toString(elements) + ", last=" + last + "]";
}
}
线性表的链表存储结构
package 线性表.链表结构存储非零项;
public class NodeTable {
private Node startNode;
private int length ;
public void show() {
Node node=startNode;
int index=1;
System.out.println("-------------show--------------");
while(node!=null) {
System.out.println("index:"+index+" num:"+node.getNum());
node=node.getNext();
index++;
}
}
/**
* 无参构造方法
*/
public NodeTable() {
startNode=null;
length=0;
}
/**
* 有参构造方法
* @param node
*/
public NodeTable(Node node) {
startNode=node;
length=1;
}
/**
* 求表长
* @return
*/
public int length() {
return length;
}
/**
* 根据索引查找
* @param index
* @return
*/
public Node findKth(int index) {
if(index<=0||index>length) {
return null;
}
Node node=startNode;
for(int i=1;i<index;i++) {
node=node.getNext();
}
return node;
}
/**
* 根据值查找节点索引
* @param num
* @return
*/
public int find(int num) {
Node node=startNode;
int indexNow=1;
while (node.getNum()!=num&&node!=null) {
node=node.getNext();
indexNow++;
}
if(node!=null) {
return indexNow;
}else {
return -1;
}
}
/**
* 插入节点
* @param index
* @param num
* @return
*/
public boolean insert(int index,int num) {
if(index<=0||index>length+1) {
System.out.println("索引越界");
return false;
}
Node node=new Node(num);
Node nodeLast=findKth(index-1);
Node nodeNext=findKth(index);
nodeLast.setNext(node);
node.setNext(nodeNext);
length++;
return true;
}
/**
* 根据索引删除节点
* @param index
* @return
*/
public boolean delete(int index) {
if(index<=0||index>length) {
System.out.println("索引越界");
return false;
}
Node node=findKth(index);
Node nodeLast=findKth(index-1);
Node nodeNext=findKth(index+1);
nodeLast.setNext(nodeNext);
node=null;
length--;
return true;
}
}