- 欢迎大家来到我的博客~
- 欢迎大家对我的博客提出指导,有错误的地方会改进的哦·~
复制代码 点击这里了解更多内容
一、线性表
线性表(linear list)是n个具有类似特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据布局,常见的线性表:顺序表、链表、栈、队列…
线性表在逻辑上是线性布局,也就说是一连的一条直线。但是在物理布局上并不肯定是一连的,线性表在物理上存储时,通常以数组和链式布局的形式存储。
二、顺序表
顺序表是用一段物理地址一连的存储单元依次存储数据元素的线性布局,一般情况下接纳数组存储,在数组上完成数据的增删查改。
顺序表的实现:
1.界说一个接口,内里放着需要实现的方法:
- public interface Ilist {
- // 新增元素,默认在数组最后新增
- public void add(int data);
- boolean isFull();
- // 在 pos 位置新增元素
- public void add(int pos, int data);
- // 判定是否包含某个元素
- public boolean contains(int toFind);
- // 查找某个元素对应的位置
- public int indexOf(int toFind);
- // 获取 pos 位置的元素
- public int get(int pos);
- // 给 pos 位置的元素设为 value
- public void set(int pos, int value);
- //删除第一次出现的关键字key
- public void remove(int toRemove);
- // 获取顺序表长度
- public int size() ;
- // 清空顺序表
- public void clear();
- // 打印顺序表,注意:该方法并不是顺序表中的方法,为了方便看测试结果给出的
- public void display() ;
- }
复制代码 2.界说一个mySeqlist类去继承接口,然后对,每个方法举行重写。
- public class mySeqlist implements Ilist{
- public final int DEFALUT_CAPTICY=10;
- public int[] array;
- //定义起始数组大小为10
- public mySeqlist() {
- this.array =new int[DEFALUT_CAPTICY];
- }
- //顺序表的元素个数
- public int usesize;
- // 新增元素,默认在数组最后新增
- @Override
- public void add(int data) {
-
- }
- @Override
- public boolean isFull() {
- return false;
- }
- @Override
- public void add(int pos, int data) {
- }
- @Override
- public boolean contains(int toFind) {
- return false;
- }
- @Override
- public int indexOf(int toFind) {
- return 0;
- }
- @Override
- public int get(int pos) {
- return 0;
- }
- @Override
- public void set(int pos, int value) {
- }
- @Override
- public void remove(int toRemove) {
- }
- @Override
- public int size() {
- return 0;
- }
- @Override
- public void clear() {
- }
- @Override
- public void display() {
- }
- }
复制代码 接下来一个一个来实现这些方法,然后完成一个顺序表的实现。
打印顺序表,留意:该方法并不是顺序表中的方法,为了方便看测试效果给出的.
- @Override
- public void display() {
- for (int i = 0; i < usesize; i++) {
- System.out.print(array[i] + " ");
- }
- }
-
复制代码 判断数组是否存储满了
- @Override
- public boolean isFull() {
- return this.usesize==array.length;
- }
复制代码 数组存储满了,然后想插入数据就得举行扩容。
- private int[] grow() {
- return this.array= Arrays.copyOf(this.array,2*this.array.length);
- }
复制代码 新增元素,默认在数组最后新增
- @Override public void add(int data) { //判断数组是否存储满了 if(isFull()){ //假如忙了就扩容 grow(); } array[usesize]=data; usesize++; }
- private int[] grow() {
- return this.array= Arrays.copyOf(this.array,2*this.array.length);
- }
- @Override
- public boolean isFull() {
- return this.usesize==array.length;
- }
复制代码 再生成一个test类,每写完一个方法,然后测试是否乐成
- public class Test {
- public static void main(String[] args) {
- mySeqlist mylist=new mySeqlist();
- //新增
- mylist.add(1);
- mylist.add(6);
- mylist.add(10);
- mylist.display();
- }
- }
复制代码 运行效果:
在 pos 位置新增元素
可以自界说一个异常,来判断输入的pos位置是否正当
- public class posillegal extends RuntimeException{
- public posillegal(){
- super();
- }
- public posillegal(String S){
- super(S);
- }
- }
复制代码 界说一个方法来判断pos是否正当
- private void Check(int pos) {
- if(pos<0||pos>usesize){
- throw new posillegal("pos位置不合法!!!");
- }
- }
复制代码 在 pos 位置新增元素
- public void add(int pos, int data) {
- try{
- Check(pos);
- if(isFull()){
- //如果忙了就扩容
- grow();
- }
- for (int i = usesize; i >pos ; i--) {
- array[i]=array[i-1];
- }
- array[pos]=data;
- usesize++;
- }catch (posillegal e){
- e.printStackTrace();
- }
- }
复制代码 测试:
点击这里了解什么是异常
- @Override
- public boolean contains(int toFind) {
- //先判断数组是否为空
- if(isempty()){
- return false;
- }
- if(Find(toFind)){
- return true;
- }
- return false;
- }
- private boolean isempty() {
- return usesize==0;
- }
- private boolean Find(int tofind) {
- for (int i = 0; i < usesize; i++) {
- if(array[i]==tofind){
- return true;
- }
- }
- return false;
- }
复制代码
获取值的下标
- @Override
- public int indexOf(int toFind) {
- for (int i = 0; i < usesize; i++) {
- if(array[i]==toFind){
- return i;
- }
- }
- return -1;
- }
复制代码
获取pos位置的值
- @Override
- public int get(int pos) {
- try{
- Check(pos);
- return array[pos];
- }catch (posillegal e){
- e.printStackTrace();
- }
- return -1;
- }
复制代码
把pos位置的元素设置酿成value
- @Override
- public void set(int pos, int value) {
- array[pos]=value;
- }
复制代码
去除某个值
- @Override
- public void remove(int toRemove) {
- if(isempty()){
- return;
- }
- int toremove=indexOf(toRemove);
- for (int i = toremove; i <usesize ; i++) {
- array[i]=array[i+1];
- }
- usesize--;
- }
复制代码
求顺序表的长度
- @Override
- public int size() {
- return usesize;
- }
复制代码
清空顺序表
- @Override
- public void clear() {
- usesize=0;
- }
复制代码
好了,到这里整个顺序表就差不多完成了。下面是完整代码:
Ilist 接口
- public interface Ilist {
- // 新增元素,默认在数组最后新增
- public void add(int data);
- boolean isFull();
- // 在 pos 位置新增元素
- public void add(int pos, int data);
- // 判定是否包含某个元素
- public boolean contains(int toFind);
- // 查找某个元素对应的位置
- public int indexOf(int toFind);
- // 获取 pos 位置的元素
- public int get(int pos);
- // 给 pos 位置的元素设为 value
- public void set(int pos, int value);
- //删除第一次出现的关键字key
- public void remove(int toRemove);
- // 获取顺序表长度
- public int size() ;
- // 清空顺序表
- public void clear();
- // 打印顺序表,注意:该方法并不是顺序表中的方法,为了方便看测试结果给出的
- public void display() ;
- }
复制代码 mySeqlist类
- import java.util.Arrays;public class mySeqlist implements Ilist{ public final int DEFALUT_CAPTICY=10; public int[] array; //界说起始数组巨细为10 public mySeqlist() { this.array =new int[DEFALUT_CAPTICY]; } //顺序表的元素个数 public int usesize; // 新增元素,默认在数组最后新增 @Override public void add(int data) { //判断数组是否存储满了 if(isFull()){ //假如忙了就扩容 grow(); } array[usesize]=data; usesize++; }
- private int[] grow() {
- return this.array= Arrays.copyOf(this.array,2*this.array.length);
- }
- @Override
- public boolean isFull() {
- return this.usesize==array.length;
- }
- // 在 pos 位置新增元素 @Override public void add(int pos, int data) {
- try{
- Check(pos);
- if(isFull()){
- //如果忙了就扩容
- grow();
- }
- for (int i = usesize; i >pos ; i--) {
- array[i]=array[i-1];
- }
- array[pos]=data;
- usesize++;
- }catch (posillegal e){
- e.printStackTrace();
- }
- }
- private void Check(int pos) {
- if(pos<0||pos>usesize){
- throw new posillegal("pos位置不合法!!!");
- }
- }
- // 判定是否包含某个元素
- @Override
- public boolean contains(int toFind) {
- //先判断数组是否为空
- if(isempty()){
- return false;
- }
- if(Find(toFind)){
- return true;
- }
- return false;
- }
- private boolean isempty() {
- return usesize==0;
- }
- private boolean Find(int tofind) {
- for (int i = 0; i < usesize; i++) {
- if(array[i]==tofind){
- return true;
- }
- }
- return false;
- }
- //获取值的下标 @Override
- public int indexOf(int toFind) {
- for (int i = 0; i < usesize; i++) {
- if(array[i]==toFind){
- return i;
- }
- }
- return -1;
- }
- //获取pos位置的值 @Override
- public int get(int pos) {
- try{
- Check(pos);
- return array[pos];
- }catch (posillegal e){
- e.printStackTrace();
- }
- return -1;
- }
- //把pos位置的元素设置酿成value @Override
- public void set(int pos, int value) {
- array[pos]=value;
- }
- //去除某个值 @Override
- public void remove(int toRemove) {
- if(isempty()){
- return;
- }
- int toremove=indexOf(toRemove);
- for (int i = toremove; i <usesize ; i++) {
- array[i]=array[i+1];
- }
- usesize--;
- }
- //求顺序表的长度 @Override
- public int size() {
- return usesize;
- }
- //清空顺序表 @Override
- public void clear() {
- usesize=0;
- }
- //打印顺序表 @Override public void display() { for (int i = 0; i < usesize; i++) { System.out.print(array[i] + " "); } }}
复制代码 自界说 pos异常
- public class posillegal extends RuntimeException{
- public posillegal(){
- super();
- }
- public posillegal(String S){
- super(S);
- }
- }
复制代码 测试类(测试仅供参考)
- public class Test {
- public static void main(String[] args) {
- mySeqlist mylist=new mySeqlist();
- //新增
- mylist.add(1);
- mylist.add(6);
- mylist.add(10);
- mylist.add(2,8);
- mylist.display();
- System.out.println();
- //System.out.println(mylist.get(1));
- mylist.set(2,9);
- mylist.remove(6);
- mylist.display();
- System.out.println();
- System.out.println(mylist.size());
- mylist.clear();
- mylist.display();
- }
- }
复制代码
欧耶!!!我学会啦!!!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |