使用Java实现顺序表(数据结构入门)
最近在学数据结构,但是学校要求的是用c语言来写,我之前c语言学的不好,只是会一点点Java。所以恶补了几天的c慢慢的有了自己的思路。昨天晚上睡觉的时候突然有个想法:能不能用Java写一下顺序表的实现呢。说干就干,早上一起床就打开电脑敲起了代码。
什么是顺序表
顺序表是指用一组地址连续的存储单元依次存储各个元素, 使得在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中的线性表。
然后代码如下(第一次写有点紧张qaq):
初始化顺序表
private int len;//初始化顺序表的长度
private int []list;//初始化一个数组,顺序表的主体。
//初始化数组长度
public Initseqlist(int max) {
this.list = new int[max];
this.len = 0;
}
清空顺序表
public void clearSeqlist() {
this.len=0;
}
这个清空很简单让这个长度等于0就行了。
检测顺序表是否为空
public boolean seqlistEmpt() {
if (this.len!=0) {
System.out.println("顺序表有值哦,亲");
return false;
}else {
System.out.println("顺序表为空哦,亲");
return true;
}
}
返回顺序表的元素个数
public int listLen() {
System.out.println(this.len);
return this.len;
}
返回顺序表中指定位置元素的值
public int[] getElem(int size) {
//初始化一个数组 用来储存值
int [] ret = new int[1];
//判断数组是否为空。
if (len==0) {
System.err.println("数组为空");
}else {
ret[0] = this.list[size-1];
}
return ret;
}
返回顺序表中第一个与指定值相同的元素的位置
public int locateElem(int value) {
//遍历全表
for (int i = 0; i < list.length; i++) {
if (this.list[i]==value) {
return i+1;
}
}
return 0;//没有找到返回0
}
返回指定元素的直接前驱
public int [] priorElem(int value) {
//初始化一个数组 用来储存值
int [] ret = new int[1];
if (len==0) {
System.out.println("顺序表为空");
}else {
//遍历全表
for (int i = 0; i < ret.length; i++) {
//如果i为第一个元素的话,是没有前驱的
if (this.list[i]==0) {
System.out.println("没有前驱");
}else {
if (this.list[i]==value) {
ret[0]=this.list[i-1];
}
}
}
}
return ret;
}
返回指定元素的直接后继
public int[] nextElem(int value) {
//初始化一个数组 用来储存值
int [] ret = new int[1];
//遍历全表
for (int i = 0; i < ret.length; i++) {
//如果元素为最后一个,那么没有后继
if (this.list[i]==ret.length) {
System.out.println("没有后继哦,亲");
}
//判断顺序表是否为空
else if (this.len==0) {
System.out.println("亲,你的顺序表为空哦");
}
//取出顺序表的后继
else {
ret[0] = this.list[i+1];
}
}
return ret;
}
向指定位置插入元素
public int listInsert(int size,int value) {
//判断插入的位置是否合法
if (size<1||size>this.len) {
System.out.println("插入位置有问题哦,亲");
}//判断顺序表是否已满
else if (this.len==this.list.length) {
System.out.println("顺序表满了哦");
}
//遍历全表
for (int i = this.len-1; i >size-1; i--) {
this.list[i+1]=this.list[i];// //从顺序表的最后一个元素开始,逐个向后移动一位,直到要插入元素的位置,为要插入的元素腾出空间
}
this.list[size-1]=value;//插入元素
this.len++;//顺序表长度加一=9090909090
return 0;
}
删除指定位置的元素
public boolean listDelete(int size) {
//判断顺序表是否合法,也就是是否有这个元素
//判断顺序表是否为空
if (this.len==0) {
System.out.println("顺序表不存在");
}else if (size ==this.len) {//如果要删除的是最后一个元素,直接将顺序表长度减一即可
this.len--;
return true;
}else {
//删除中间的元素。
for (int i = 0; i < list.length; i++) {
this.list[i]=this.list[i+1];
}
this.len--;
}
return true;
}
遍历顺序表
public String traverseList() {
String string =""; //用来储存顺序表中的值
for (int i = 0; i < list.length; i++) {
string+=this.list[i]+"、";
}
if (string.length()==0) {
return string;
}
return string.substring(0,string.length()-1);
}
这里实现了顺序表的一些简单的操作比如:遍历,删除之类的简单的功能。我不是什么大牛,我只是一个正在不断学习的小白,一名大三狗。希望看见我这文章的大佬们嘴下留情,我知道我写的不好,优化的不足。不喜勿喷,不喜勿喷。