Java实现数据结构线性结构部分

线性结构部分

在数据结构中,线性结构主要分为顺序表、链表、栈、查找算法、队列和线性回归。
链表部分代码在上一篇中已经单独拿出。

栈的实现

代码如下:

package 线性结构;

public class MyStack {
	int [] elements;
	public MyStack() {
		elements = new int[0];
	}
	//入栈
	public void push(int element) {
		int []newArr = new int[elements.length+1];
		for (int i =0; i<elements.length;i++) {
			newArr[i] = elements[i];
		}
		newArr[elements.length] = element;
		elements = newArr;
	}
	//出栈
	public int pop() {
		if (elements.length == 0) {
			throw new RuntimeException("Stack is empty");
		}
		int element = elements[elements.length-1];
		//创建新数组
		int [] newArr = new int[elements.length-1];
		for (int i = 0; i< elements.length-1;i++) {
			newArr[i] = elements[i];
		}
		elements = newArr;
		return element;
	}
	//查看栈顶元素
	public int peek() {
		if (elements.length == 0) {
			throw new RuntimeException("Stack is empty");
		}
		return elements[elements.length-1];
	}
	//查看栈是否为空
	public boolean isEmpty() {
		return elements.length == 0;
	}
	public static void main(String[] args) {
		MyStack ms = new MyStack();
		//入栈
		//System.out.println(ms.pop());
		ms.push(8);
		ms.push(7);
		ms.push(6);
		//System.out.println(ms.pop());
		//System.out.println(ms.pop());
		//System.out.println(ms.pop());
		System.out.println(ms.peek());
		System.out.println(ms.pop());
		System.out.println(ms.peek());
		System.out.println(ms.isEmpty());
	}
	
}

队列

实现代码如下:
package 线性结构;

public class MyQueue {
int [] elements;
public MyQueue() {
elements = new int[0];
}
//入队
public void add(int element) {
int [] newArr = new int[elements.length+1];
for(int i = 0;i <elements.length;i++) {
newArr[i] = elements[i];
}
newArr[newArr.length-1] = element;
elements = newArr;
}
//出队
public int poll() {
int element = elements[0];
int [] newArr = new int[elements.length-1];
for (int i = 0; i<newArr.length;i++) {
newArr[i] = elements[i+1];
}
elements = newArr;
return element;
}
public boolean isEmpty() {
return elements.length == 0;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
MyQueue mq = new MyQueue();
mq.add(9);
mq.add(8);
mq.add(7);
System.out.println(mq.poll());
System.out.println(mq.poll());
System.out.println(mq.isEmpty());
}
}

##查找算法
代码实现如下:

package 线性结构;

import java.util.Arrays;

public class MyArray {
	public int[] elements;
	public MyArray() {
		elements = new int[0];
		
	}
	//数组长度
	public int size() {
		return elements.length;
	}
	//添加元素
	public void add(int element) {
		int []newArray = new int[elements.length+1];
		for (int i =0; i<elements.length;i++) {
			newArray[i] = elements[i];
		}
		newArray[elements.length] = element;
		elements = newArray;
	}
	//显示数组
	public void show() {
		System.out.println(Arrays.toString(elements));
	}
	//删除元素
	public void delete(int index) {
		if(index <0 || index >elements.length-1) {
			throw new RuntimeException("下标越界");
		}
		else {
			int [] newarr = new int[elements.length-1];
			for (int i = 0;i <newarr.length;i++) {
				if(i<index) {
					newarr[i] = elements[i];
				}
				else {
					newarr[i] = elements[i+1];
				}
			}
			elements = newarr;
		}
	}
	//得到指定位置元素的值
	public int get(int index) {
		return elements[index];
	}
	//指定位置添加元素
	public void insert(int index,int element) {
		if(index <0 || index >elements.length-1) {
			throw new RuntimeException("下标越界");
		}
		int [] newArr = new int [elements.length+1];
		for (int i = 0;i <elements.length;i++) {
			if (i <index) {
				newArr[i] = elements[i];
			}
			else {
				newArr[i+1] = elements[i];
			}
		}
		newArr[index] = element;
		elements = newArr;
	}
	//指定位置替换值
	public void set(int index,int element) {
		if(index <0 || index >elements.length-1) {
			throw new RuntimeException("下标越界");
		}
		elements[index] = element;
	}
	//顺序查找
	public int search(int target) {
		for (int i =0;i <elements.length;i++) {
			if (elements[i] == target) {
				return i;

			}
		}
		return -1;
	}
	//二分法查找
	public int binarySearch(int target) {
		int start = 0;
		int end = elements.length-1;
		int mid = (start+end)/2;
		
		while(true) {
			if (start >= end) return -1;
			if (elements[mid] == target) {
				
				return mid;
			}
			else {
				if (elements[mid]>target) {
					end  = mid-1;
				}
				else {
					start = mid +1;
				}
				mid = (start +end)/2;
			}
		}
		

	}
	
	public static void main(String[] args) {
		MyArray myarray = new MyArray();
		int size = myarray.size();
		System.out.println(size);
		myarray.add(1);
		myarray.add(56);
		myarray.add(75);
		myarray.add(74);
		myarray.add(73);
		System.out.println(myarray.size());
		myarray.show();
		System.out.println(myarray.get(2));
		myarray.delete(2);
		myarray.show();
		myarray.insert(2, 100);
		myarray.show();
		myarray.set(3, 200);
		myarray.show();
		int index = myarray.search(100);
		System.out.println("index:"+index);
		int index2 = myarray.binarySearch(200);
		System.out.println("index2:"+index2);
		
	}
	
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Changcc_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值