Java实现数据结构与算法-顺序表

顺序表

按照顺序方式存储的线性表,在计算机中存放为一组连续的存储单元。只要知道首地址和长度,很容易计算出每一个元素的位置。

/**
 * @author Hash.Zhang
 *
 */
public class SequentialList {
	static final int MAXLEN=100;
	Data []ListData=new Data[MAXLEN+1];
	int ListLen;
	/**
	 * SLInit: Initiate the sequential list as an empty list.
	 */
	public void SLInit(SequentialList SL)
	{
		SL.ListLen=0;
	}
	/**
	 * SLLength: Get the length of the sequential list.
	 * @return the length of the seqential list
	 */
	public int SLLength(SequentialList SL)
	{
		return SL.ListLen;
	}
	/**
	 * SLInsert: Insert a new node with data to SL at index n
	 * @return true for successfully inserting; false for not successfully inserting
	 */
	public boolean SLInsert(SequentialList SL,int n,Data data)
	{
		if(SL.ListLen>=MAXLEN)
		{
			System.out.println("The list if full! Cannot insert more nodes!");
			return false;
		}
		if(n<0||n>SL.ListLen-1)
		{
			System.out.println("Wrong Index! Cannot insert node to that position!");
			return false;
		}
		for(int i=SL.ListLen;i>=n;i--)
		{
			SL.ListData[i+1]=SL.ListData[i];
		}
		SL.ListData[n]=data;
		SL.ListLen++;
		return true;
	}
	/**
	 * SLAdd: Add a new node with data at the end of the list
	 * @return true for successfully inserting; false for not successfully inserting
	 */
	public boolean SLAdd(SequentialList SL, Data data)
	{
		if(SL.ListLen>=MAXLEN)
		{
			System.out.println("The list if full! Cannot insert more nodes!");
			return false;
		}
		SL.ListData[SL.ListLen++]=data;
		return true;
	}
	/**
	 * SLDelete: delete the node with same ID as key
	 * @param key
	 */
	public boolean SLDelete(SequentialList SL, String key)
	{
		int position=SLFindByID(SL,key);
		if(position==-1)
		{
			System.out.println("Key not found, please check!");
			return false;
		}
		for(int i=position;i<SL.ListLen-1;i++)
		{
			SL.ListData[i]=SL.ListData[i+1];
		}
		SL.ListLen--;
		return true;
	}
	/**
	 * SLDelete: delete the node at position n
	 * @param n
	 */
	public boolean SLDelete(SequentialList SL, int n)
	{
		if(n<0||n>SL.ListLen-1)
		{
			System.out.println("Wrong Index! Cannot delete the node at that position!");
			return false;
		}
		for(int i=n;i<SL.ListLen-1;i++)
		{
			SL.ListData[i]=SL.ListData[i+1];
		}
		SL.ListLen--;
		return true;
	}
	/**
	 * SLFindByNum: get the node at position n
	 */
	public Data SLFindByNum(SequentialList SL,int n)
	{
		if(n<0||n>SL.ListLen-1)
		{
			System.out.println("Wrong Index! Cannot access the node at that position!");
			return null;
		}
		return SL.ListData[n];
	}
	/**
	 * SLFindByNum: get the Index of the node with same ID as key 
	 * @return -1 for not finding the key
	 */
	public int SLFindByID(SequentialList SL, String key)
	{
		for(int i=0;i<SL.ListLen;i++)
		{
			if(SL.ListData[i].ID.equals(key))
			{
				return i;
			}
		}
		return -1;
	}
	/**
	 * Print the content of the whole list
	 */
	public void PrintSL(SequentialList SL)
	{
		System.out.println("Net nodes: "+SL.ListLen);
		for(int i=0;i<SL.ListLen;i++)
		{
			System.out.printf("(ID:%s,Sequence No.%d) ",SL.ListData[i].ID,SL.ListData[i].SequenceNo);
		}
		System.out.println();
	}
	/**
	 * Main method to test
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		SequentialList SL=new SequentialList();
		for(int i=0;i<10;i++)
		{
			SL.SLAdd(SL, new Data(i,"Hash"+i));
		}
		SL.PrintSL(SL);
		SL.SLInsert(SL, 5, new Data(19,"Hash"+19));
		SL.PrintSL(SL);
		SL.SLDelete(SL,1);
		SL.PrintSL(SL);
		SL.SLDelete(SL,"Hash19");
		SL.PrintSL(SL);
	}

}
public class Data {
<span style="white-space:pre">	</span>int SequenceNo;
<span style="white-space:pre">	</span>String ID;
<span style="white-space:pre">	</span>public Data()
<span style="white-space:pre">	</span>{}
<span style="white-space:pre">	</span>public Data(int a)
<span style="white-space:pre">	</span>{
<span style="white-space:pre">		</span>SequenceNo=a;
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>public Data(String ch)
<span style="white-space:pre">	</span>{
<span style="white-space:pre">		</span>ID=ch;
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>public Data(int a,String ch)
<span style="white-space:pre">	</span>{
<span style="white-space:pre">		</span>SequenceNo=a;
<span style="white-space:pre">		</span>ID=ch;
<span style="white-space:pre">	</span>}
}

输出结果:

Net nodes: 10
(ID:Hash0,Sequence No.0) (ID:Hash1,Sequence No.1) (ID:Hash2,Sequence No.2) (ID:Hash3,Sequence No.3) (ID:Hash4,Sequence No.4) (ID:Hash5,Sequence No.5) (ID:Hash6,Sequence No.6) (ID:Hash7,Sequence No.7) (ID:Hash8,Sequence No.8) (ID:Hash9,Sequence No.9) 
Net nodes: 11
(ID:Hash0,Sequence No.0) (ID:Hash1,Sequence No.1) (ID:Hash2,Sequence No.2) (ID:Hash3,Sequence No.3) (ID:Hash4,Sequence No.4) (ID:Hash19,Sequence No.19) (ID:Hash5,Sequence No.5) (ID:Hash6,Sequence No.6) (ID:Hash7,Sequence No.7) (ID:Hash8,Sequence No.8) (ID:Hash9,Sequence No.9) 
Net nodes: 10
(ID:Hash0,Sequence No.0) (ID:Hash2,Sequence No.2) (ID:Hash3,Sequence No.3) (ID:Hash4,Sequence No.4) (ID:Hash19,Sequence No.19) (ID:Hash5,Sequence No.5) (ID:Hash6,Sequence No.6) (ID:Hash7,Sequence No.7) (ID:Hash8,Sequence No.8) (ID:Hash9,Sequence No.9) 
Net nodes: 9
(ID:Hash0,Sequence No.0) (ID:Hash2,Sequence No.2) (ID:Hash3,Sequence No.3) (ID:Hash4,Sequence No.4) (ID:Hash5,Sequence No.5) (ID:Hash6,Sequence No.6) (ID:Hash7,Sequence No.7) (ID:Hash8,Sequence No.8) (ID:Hash9,Sequence No.9) 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值