java实现顺序链表

 

C&C++是那么难学,以至于我连指针是什么都不知道。所以只能学习java了。

如今想用java实现N年前学过“数据结构(c语言版)”却又是那么吃力!

慢慢练吧!

写此博客,仅标记自己学过数据结构。以《数据结构(C语言版)》-严蔚敏 书本为参考。

 

顺序链表的java类文件:SequenceList.java文件

package list;



public class SequenceList {
	private int LIST_INIT_SIZE = 5;//链表的原始大小
	private int INCREMENT =1;//链表的增量大小
	private Object []SqList = null;//链表
	private int curIndex=0;//当前位置
	/**
	 * 初始化链表
	 * */
	public void initList()
	{
		SqList = new Object[LIST_INIT_SIZE];
	}
	/**
	 * 向链表中插入元素
	 * */
	public void insertList(Object o)
	{
		if(curIndex>LIST_INIT_SIZE-1)//判断当前链表是否已经满
		{
			//从新为链表分配空间
			System.out.println("从新分配空间");
			LIST_INIT_SIZE+=INCREMENT;
			Object []temp = new Object[LIST_INIT_SIZE];
			for(int i=0;i<curIndex;i++)
			{
				temp[i]=SqList[i];
			}
			SqList=null;
			SqList=temp;
		}
		//链表中如果不让其包含重复元素,则加入这段代码
		/*
		if(isContain(o))
		{
			System.out.println("链表中已包含此元素"+o);
		}else
		{
			
		}
		*/
		SqList[curIndex++]= o;
	}
	/**
	 * 判断链表中是否包含某元素
	 * */
	Boolean isContain(Object o)
	{
		for(int i=0;i<curIndex;i++)
		{
			if(SqList[i].equals(o))
			{
				return true;
			}
		}
		return false;
	}
	/**
	 * 删除链表中的某元素
	 * 
	 * 如果包含重复元素都删除
	 * */
	public void delete(Object o)
	{
		for(int i=0;i<curIndex;i++)
		{
			if(SqList[i].equals(o))
			{
				for(int j=i;j<curIndex-1;j++)
				{
					SqList[j]=SqList[j+1];
				}
				curIndex--;
				continue;
			}
			if(i==curIndex-1)
			{
				System.out.println("不存在此元素"+o);
			}
		}
	}
	
	/**
	 * 获取链表中的某个元素
	 * */
	public Object getElement(int i)
	{
		if (i <= 0 || i > curIndex) 
		{
			System.out.println("获取位置超出了链表中元素个数"+curIndex);
		}
		return SqList[i-1];
	}
	/**
	 * 打印链表
	 * */
	public void print()
	{
		for(int i=0;i<curIndex;i++)
		{
			System.out.print(SqList[i]+"\t");
		}
		System.out.println();
	}
	
}

  Main函数测试类

package list;

public class SequenceListMain {

	public static void main(String[] args) {
		SequenceList sqList = new SequenceList();
		sqList.initList();
		sqList.insertList(1);
		sqList.insertList(2);
		sqList.insertList(3);
		sqList.insertList(4);
		sqList.insertList(5);
		sqList.insertList(6);
		sqList.delete(5);
		sqList.delete(9);
		sqList.insertList(1);
		sqList.print();
		
		sqList.delete(1);
		sqList.print();
		
		System.out.println("第2个元素是:"+sqList.getElement(1));
		System.out.println("第4个元素是:"+sqList.getElement(4));
		
	}

}

  

顺序表和链表是两种基本的数据结构,它们在Java中可以分别通过数组和链式节点来实现顺序表通常使用数组来实现,因为它提供了连续的内存空间,可以通过下标直接访问元素,实现O(1)时间复杂度的查找操作。顺序表的插入和删除操作时间复杂度为O(n),因为这可能涉及到移动大量元素来填补因删除元素或插入新元素而在数组中产生的空位或额外空间。 链表使用一系列的节点来存储数据,每个节点都包含数据以及指向下一个节点的引用(在双向链表中,还有指向前一个节点的引用)。链表的插入和删除操作通常只需要改变相应的指针,因此在理想情况下时间复杂度为O(1),而查找操作需要从头节点开始,遍历链表,直到找到目标节点,所以时间复杂度为O(n)。 以下是使用Java实现顺序表和链表的简单示例: 顺序表(数组实现): ```java public class ArrayList<T> { private T[] data; private int size; public ArrayList(int capacity) { data = (T[]) new Object[capacity]; size = 0; } public void add(T element) { if (size >= data.length) { resize(); } data[size++] = element; } // 其他方法,如get(index), remove(index)等 private void resize() { // 实现扩容逻辑 } } ``` 链表(单向链表实现): ```java public class LinkedList<T> { private Node<T> head; private Node<T> tail; private int size; private static class Node<T> { T data; Node<T> next; public Node(T data, Node<T> next) { this.data = data; this.next = next; } } public LinkedList() { head = null; tail = null; size = 0; } public void add(T element) { Node<T> newNode = new Node<>(element, null); if (head == null) { head = newNode; tail = newNode; } else { tail.next = newNode; tail = newNode; } size++; } // 其他方法,如get(index), remove(index)等 } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值