线性结构部分
在数据结构中,线性结构主要分为顺序表、链表、栈、查找算法、队列和线性回归。
链表部分代码在上一篇中已经单独拿出。
栈的实现
代码如下:
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);
}
}