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;
}
}
java 数据结构之 顺序存储结构 串
最新推荐文章于 2024-01-25 07:45:00 发布