数据结构-数组
数据结构-数组 数组是应用最广泛的数据存储结构。它被植入到编程语言中。由于数组十分易懂,所以它用来作为介绍数据结构的起步点,并展示面向对象编程和数据结构之间的相互关系。
无序数组:
创建一个数组类,通过调用数组类来操作数组。
//通过面向对象来实现增、删、查的操作
publicclass HighArray {
privatelong[] a;
privateintnElem;
public HighArray(int size){
a = newlong[size];
nElem = 0;
}
//向数组内插入数据
publicvoid setA(long value) {
a[nElem]=value;
nElem++;
}
//按条件查找数据
publicboolean Seachkey(long value){
boolean s=false;
for(int i=0;i<nElem;i++){
if(a[i]==value){
s=true;
break;
}else{
s=false;
}
}
return s;
}
//删除指定数据
publicboolean delete(long value){
boolean ss=false;
for (int i=0; i<nElem;i++){
if(a[i]==value){
for(int k=i;k<nElem;k++){
a[k]=a[k+1];
}
ss=true;
break;
}
}
nElem--;
return ss;
}
//输出全部数据
publicvoid display(){
for (int i = 0; i < nElem; i++) {
System.out.print(a[i]+" ");
}
}
}
publicclass HigArrayApp {
publicstaticvoid main(String args[]){
int maxSize =100;
HighArray hh;//引用HighArray类
hh = new HighArray(maxSize);//创建HighArray对象
hh.setA(99);
hh.setA(77);
hh.setA(88);
hh.setA(66);
hh.setA(55);
hh.setA(44);
hh.setA(33);
hh.setA(22);
hh.setA(11);
hh.setA(26);
//输出数组
hh.display();
//查找特定数据
hh.Seachkey(66);
if(hh.Seachkey(66)){
System.out.println("查到:"+66);
}else {
System.out.println("没查到:"+66);
}
//删除特定数据
hh.delete(26);
hh.display();
}
}
有序数组:
二分查找法
当使用二分查找法时就会提现出有序数组的好处。
例:猜数游戏
假如你才一个100(或n)只内的数字,你当先从50(或n/2)开始猜,假如猜的数大于50在,从51-100之间的中间处开始猜,以此类推最终可以猜到这个数字,而其猜的次数会减少很多。这就是二分查找法。
例:
publicclass OrdHigh {
privatelong[] d; //引用数组a
privateintnElems; //记录数据的中个数
public OrdHigh(int max){
d=newlong[max]; //创建数组
nElems = 0;
}
publicint size(){ //返回nElems的值
returnnElems;
}
/* 用二分查询法查询特定的数据*/
publicint find(long seachkey){
int lowerBound = 0; //存放最小值的下标
int upperBound = nElems-1; //存放最大值的下标
int curIn; //存放中间值下标
while (true) {
curIn = (lowerBound+upperBound)/2;//获取中间值的下标
if(d[curIn]==seachkey){//判断中间值与特定的数据是否相等
return curIn;
}elseif(lowerBound>upperBound){
returnnElems; //没找到的时候
}
else{
if(d[curIn]>seachkey){
upperBound = curIn -1; //将中间值的下标-1当做最大值的下标
}else{
lowerBound = curIn +1;//将中间值的下标+1当做最小值的下标
}
}
}
}
/*向有序数组中存放值*/
publicvoid insert(long value){
//将数组按顺序存储
for(int j=0;j<nElems;j++){
//如果存入的值比原有的值小就返回,若是大就将其向比它小的值前面移
if(d[j] > value){
break;
}else{
for (int i = nElems; i>j; i--) {
d[i] = d[i-1];
}
d[j] = value;
}
}
nElems++;
<补充:软件开发 , Java ,