博主上个学期学了数据结构(C语言版),第一章就是顺序表。这个学期学的是java,同样可以实现之前的代码。这里把代码贴出来,方便以后学习,回顾。
文件名:App.java
/*编写类,实现如下功能:
*1、创建有序顺序表
*2、包含如下基本操作:初始化、增加、删除、查找、打印元素
* 注意:初始化不同于用new 创建元素。
*
*目的:
* 1、理解成员变量、成员方法的含义
* 注意:相关方法的参数列表与C不同,顺序表成员的存取也与C不同
* 2、理解类=成员变量+成员方法,以及其使用方式。
**/
import java.util.Scanner;
class SortedList{//按升序排列的顺序表
final int MaxNum=100; //最大容量
int[] a=new int[MaxNum];//如果期望在构造对象时决定顺序表的容量,如何处理?
int len;
void init(){ len=0;}
void add(int x){//将x插入顺序表的合适位置【参数列表与C不同】
if(len==MaxNum){
System.out.print("表已满,无法插入!"); return;
}
int i;
for(i=len-1; i>=0&&a[i]>x; i--)//找合适位置,同时移出空位
a[i+1]=a[i];
a[i+1]=x;
len++;
}
int findX(int x){//在顺序表中查找值为x的元素,返回其下标。找不到则返回-1
if(len==0)return -1;
int mid,low,high;
low=0;high=len-1;
while(low<=high){
mid=(low+high)/2;
if(x==a[mid])return mid;
if(x<a[mid])high=mid-1;
else low=mid+1;
}
return -1;
}
void deleteX(int x){//删除第一个值为x的元素
if(len==0) return;
int pos,i;
//注意:for(int i=...)其中i的作用域仅限于该for循环,出循环则无意义
pos=findX(x);
if(pos==-1)return;
for(i=pos+1; i<len; i++)
a[i-1]=a[i];//找到合适位置
len--;
}
void showInfo(){
for(int i=0; i<len; i++)
System.out.print(a[i]+" ");
}
}
class App{
static SortedList creatList(){//输入一组数据,以-1结束,创建有序表
//这个方法代表着在外部使用SortedList类
SortedList sL=new SortedList();
Scanner sc=new Scanner(System.in);
int x;
x=sc.nextInt();
while(x!=-1){
sL.add(x); //注:由于创建的是有序表,不能将此句改成sL.a[i]=x;
x=sc.nextInt();
}
return sL;
}
public static void main (String[] args) {
System.out.print("请输入一组数,-1结束:\n");
SortedList sL=creatList();
System.out.print("有序表数据为:\n");
sL.showInfo();
System.out.print("\n请输入要删除的数:");
Scanner sc=new Scanner(System.in);
int x=sc.nextInt();
sL.deleteX(x);
System.out.print("有序表数据为:\n");
sL.showInfo();
System.out.print("\n请输入要插入的数:");
x=sc.nextInt(); sL.add(x);
System.out.print("有序表数据为:\n");
sL.showInfo();
}
}