java 資料結構之 順序儲存結構 串
阿新 • • 發佈:2019-01-29
package com.xdl.data_stru; /** * @author xudaolong 串的結構本質和char[]這種沒什麼區別; */ @SuppressWarnings("unused") public class Day_Four_SeqString { private char[] str; private int length; private void init(int max_num) { this.str = new char[max_num + 1];// 定義中的[]是元素的個數 str[0] = '\0';// 標誌 this.length = 0; } // 賦值 private void assign(char[] ch) { this.str = new char[ch.length + 1]; for (int i = 0; i < ch.length; i++) { this.str[i] = ch[i]; } this.str[ch.length] = '\0'; this.length = ch.length; } // 賦值,和上面沒什麼差別; private void assign(Day_Four_SeqString s) { this.str = new char[s.length + 1]; for (int i = 0; i < s.length; i++) { this.str[i] = s.str[i]; } this.str[s.length] = '\0'; this.length = s.length; } /** * @param ch * 核心:忍法:替身術,追加在原有的str後; */ private void concat(char[] ch) { Day_Four_SeqString str = new Day_Four_SeqString(); str.assign(this.str); // 上面兩句是為了儲存已存在的str.然後重置,char[]在初始化的時候已經被設定固定了; this.str = new char[ch.length + this.length + 1]; for (int i = 0; i < this.length; i++) { this.str[i] = str.str[i]; } for (int i = 0; i < ch.length; i++) { this.str[i + this.length] = ch[i]; } this.length = this.length + ch.length; this.str[this.length] = '\0'; } //求子串 private Day_Four_SeqString substr(int start, int len) { Day_Four_SeqString str = new Day_Four_SeqString(); //以下條件對輸入值 start 和 len 進行控制,觸發一個就byebye了,哦,其實挺隨意的; if (start <1 || start > this.length || is_null() || len >this.length -start +1) { str.init(0); return str;//空置 } str.init(this.length); for (int i = 0; i < len; i++) { str.str[i] = this.str[i+(start-1)]; //start 對應的下表是start -1; } return str; } //定位 private int index(char [] ch) { int i = 0,j = 0; while (i<this.length&& j<ch.length) { if (this.str[i]==ch[j]) { i++; j++; }else { i = i - j +1 ; j = 0; } } if (j == ch.length) { return i-ch.length+1; } return 0; } private boolean is_null() { if (this.length == 0) { return true; } return false; } public int getLen() { return length; } }