数据结构java_数据结构(java版)

展开全部

package game24.datastructure.list;

/**

* 链表的结点

* @e69da5e6ba903231313335323631343130323136353331333332636331author luoweifu

*

*/

class Node{

Object data;//数据元素

Node next;//后驱结点

public Node() {

this(null);

}

public Node(Object data) {

this.data = data;

this.next = null;

}

}

/**

* 带头结点的链式链表,下标从0开始;

* @author Administrator

*

*/

public class SinglyLinkedList{

Node head;//头结点

int size;//链表的大小

public SinglyLinkedList() {

head = new Node();

size = 0;

}

public SinglyLinkedList(E[] datas) {

int n = datas.length;

head = new Node();

Node p = head;

for(int i=0; i

p.next = new Node(datas[i]);

p = p.next;

}

size = n;

}

public SinglyLinkedList(SinglyLinkedList list) {

head = list.head;

size = list.size();

}

public void add(Object e) {

Node p;

if(0 == size) {

p = head;

} else {

p = index(size-1);

}

p.next = new Node(e);

size ++;

}

public void concat(SinglyLinkedList list) {

Node lastNode = this.index(size - 1);

lastNode.next = list.index(0);

size += list.size();

}

public void clear() {

head.next = null;

size = 0;

}

public Object get(int i) {

Node p = index(i);

return p.data;

}

private Node index(int i) {

Node p = null;

if(i>=0 && i

p = head;

for(int j=0; j<=i; j++) {

p = p.next;

}

}

return p;

}

public int indexOf(Object e) {

Node p = head.next;

int i = 0;

while(!p.data.equals(e)) {

p = p.next;

i++;

}

if(i

return i;

else

return -1;

}

public void insert(int i, Object e) {

Node p = index(i);

Node p2 = new Node(e);

p2.next = p.next;

p.next = p2;

size ++;

}

public boolean isEmpty() {

if(size ==0)

return true;

else

return false;

}

public int lastIndexOf(Object e) {

int i = size-1;

while(!get(i).equals(e)) {

i--;

}

if(i>=0)

return i;

else

return -1;

}

public void remove(int i) {

if(i>=0 && i

Node p = null;

if(i == 0)

p = head;

else {

p = index(i-1);

}

p.next = index(i).next;

}

size --;

}

public void set(int i, Object e) {

Node p = index(i);

p.data = e;

}

public int size() {

return size;

}

@Override

public boolean equals(Object obj) {

SinglyLinkedList list = (SinglyLinkedList)obj;

if(this == obj && size == list.size) {

return true;

}

return false;

}

/**

* 测试线性表

* @param args

*/

public static void main(String args[]) {

//List list = new LinkList();

//List list = new DoubleLinkList();

SinglyLinkedList list1 = new SinglyLinkedList();

for(int i=0; i<10; i++) {

list1.add(new Integer(i));

}

Integer [] a = {101, 102, 103, 104, 105, 106, 107, 108, 109, 110};

SinglyLinkedList list = new SinglyLinkedList(a);

list.remove(9);

System.out.print("size:" + list.size() + "\n");

System.out.println("isEmpty:" + list.isEmpty());

System.out.print("第7个位置的元素:" + list.get(7) + "\n");

list.concat(list1);

for(int i=0; i

System.out.print(list.get(i) + "    ");

}

list.add(21);

list.add(22);

list.insert(3, new Integer(5));

System.out.print("size:" + list.size() + "\n");

System.out.print("第一次出现5的索引:" + list.indexOf(5) + "\n");

System.out.print("最后一次出现5的索引:" + list.lastIndexOf(5) + "\n");

list.set(0, new Integer(30));

for(int i=0; i

System.out.print(list.get(i) + "    ");

}

SinglyLinkedList list2 = list;

System.out.println("\n is equels?  " + list2.equals(list));

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值