顺序表的基本操作实现代码

来源:互联网 发布:大张伟的姜昆女友知乎 编辑:程序博客网 时间:2024/04/30 03:11
<pre name="code" class="java">package seqlist;import java.util.Arrays;import java.util.Random;public class SeqList {private int data[];private int maxSize;// 顺序表的容量private int last;// 表示顺序表的长度public int getMaxSize() {return maxSize;}public int getLast() {return last;}public void setLast(int last) {this.last = last;}public SeqList(int maxSize) {// TODO Auto-generated constructor stubthis.maxSize = maxSize;data = new int[maxSize];last = -1;}// 增,插入成功返回true,否则false,在位置location插入数据public boolean insert(int location, int x) {boolean flag = true;// 检查是否有剩余空间if (last == maxSize - 1) {flag = false;}// 判读插入位置是否正确int index = location - 1;if (index < 0 || index > last + 1) {flag = false;}for (int i = last; i >= index; i--) {data[i + 1] = data[i];}data[index] = x;last++;return flag;}// 删位置为location的元素,并且返回删除的元素public int deleteLocation(int location) {// 判断删除的位置是否正确int index = location - 1;int finddata = -1;if (!(index >= 0 && index <= last)) {return finddata;} else {finddata = data[index];for (int i = index; i < last; i++) {data[i] = data[i + 1];}}last--;return finddata;}// 改 将位置location的元素替换为otherpublic boolean replace(int location, int other) {boolean flag = true;int index = location - 1;if (!(index >= 0 && index <= last))flag = false;elsedata[index] = other;return flag;}// 查,按值查找,返回下标public int findByValue(int value) {int index = -1;for (int i = 0; i <= last; i++) {if (data[i] == value) {index = i;break;}}return index;}// 查下标的值public int findByIndex(int index) {if (!(index >= 0 && index <= last))return -1;elsereturn data[index];}// 遍历public void print() {StringBuilder sb = new StringBuilder();sb.append("[");for (int i = 0; i <= last; i++) {if (i == last) {sb.append(data[i]);} else {sb.append(data[i]).append(",");}}sb.append("]");System.out.println(sb.toString());}public static void main(String[] args) {/* * SeqList sl=new SeqList(30); for(int i=1;i<=7;i++){ Random r=new * Random(); sl.insert(i, r.nextInt(20)+1); } sl.print(); * sl.deleteLocation(3); sl.print(); sl.replace(2, 89); sl.print(); * System.out.println(sl.findByValue(13)); */SeqList A = new SeqList(10);for (int i = 1; i <= 7; i++) {A.insert(i, i);}A.print();SeqList B = new SeqList(20);for (int i = 1; i <= 4; i++) {B.insert(i, i + 12);}B.print();SeqList C = Merge.merge(A, B);C.print();}}class Merge {public static SeqList merge(SeqList A, SeqList B) {int i = 0, j = 0, location_c = 1;int maxSizeC=A.getLast() +1+ B.getLast()+1; //找了半天的错误SeqList C = new SeqList(maxSizeC);// 依次扫描比较sq1和sq2中元素while (i <= A.getLast() && j <= B.getLast()) {if (A.findByIndex(i) > B.findByIndex(j)) {C.insert(location_c, B.findByIndex(j));location_c++;j++;} else if (A.findByIndex(i) < B.findByIndex(j)) {C.insert(location_c, A.findByIndex(i));location_c++;i++;} else {// 相等的情况,只插入一份C.insert(location_c, A.findByIndex(i));location_c++;i++;j++;}}while (i <= A.getLast()) {C.insert(location_c, A.findByIndex(i));location_c++;i++;}while (j <= B.getLast()) {C.insert(location_c, B.findByIndex(j));location_c++;j++;}return C;}}


                                             
0 0
原创粉丝点击