初探字符串和數組

注:定義來源於
《數據結構(C++版)(王紅梅/胡明/王濤 編著)》 第2版

1.字符串

1.1 定義

字符串(string,簡稱串)是零個或多個字符組成的有限序列,只包含空格的串稱爲空格串

1.2 字符串的存儲結構

字符串是數據元素爲單個字符的線性表,一般採用順序存儲。類似於順序表,字符串的順序存儲結構是用數組來存儲串中的字符序列。在Pascal、C?C++、java等語言中,字符串都是採用順序存儲。

2 數組

2.1 定義

數組(array)是由類型相同的數據元素構成的有序集合,每個數據元素稱爲一個數組元素…。數組是一個具有固定格式和數量的數據集合,在數組上一般不能執行插入或者刪除某個元素的操作。因此,除了初始化和銷燬之外,在數組中通常只有兩種操作:1.讀操作;2.寫操作。這兩種操作本質上對應一種操作-------尋址(關於尋址,讀者最好看一下原書。),即根據一組下標定位相應的數組元素。

2.2 數組的創建、賦值

      //創建數組,並設置長度
        int[] arr1 = new int[3];
        //給數組賦值,注意,下標是從0開始
        arr1[0] = 110;
        arr1[1] = 111;
        arr1[2] = 112;
        //訪問數組中的元素
        int elem1 = arr1[0];
        //獲取數組的長度
        int length = arr1.length;

        //創建數組並賦值
        int[] arr2 = new int[]{210, 211, 212, 213};

2.3 添加元素

        // 1:創建一個新數組,新數組的長度是原數組的長度+1
        // 2:然後把原數組copy到新數組最後;
        // 3:把目標元素添加到新數組中;
        // 4:把新數組替換原數組
        int addElem = 214;
        int[] newArr = new int[arr2.length + 1];
        for (int i = 0; i < arr2.length; i++) {
            newArr[i] = arr2[i];
        }
        newArr[arr2.length] = addElem;

        arr2 = newArr;
        System.out.print(Arrays.toString(arr2));

2.4 刪除數組中的元素

在指定位置添加一個元素,和這個原理類似,不寫嘍就。

        // 1.創建一個新數組,長度是原數組長度-1,
        // 2.複製原數組中除了要刪除元素以外的元素,
        // 3.新數組替換原數組

        int[] arr3 = new int[]{210, 211, 212, 213,214};
        int deletPos = 2;//要刪除元素下標
        int[] arr4 = new int[arr3.length - 1];
        for (int i = 0; i < arr4.length; i++) {
            if (i < deletPos) {
                arr4[i] = arr3[i];
            }else {
                arr4[i] = arr3[i +1];
            }
        }
        arr3 = arr4;
        System.out.print(Arrays.toString(arr3));

4.線性查找

查找元素target的下標,如果數組內有元素target,則返回相應下標,否則,返回-1.
線性查找缺點很明顯,效率低

  int[] arr5 = new int[]{0, 2, 3, 4, 5, 6, 7, 8, 9, 99};
        int target = 8;
        int index = -1;
        for (int i = 0; i < arr5.length; i++) {
            if (arr5[i] == target) {
                index = i;
                break;
            }
        }

        System.out.print(index);

5. 二分法查找

查找元素target的下標,如果數組內有元素target,則返回相應下標,否則,返回-1.
優點很明顯,查找速度快。缺點當然也很明顯,目標數組是有序的。

 int[] arr6 = new int[]{1, 2, 3, 4, 5, 6, 7, 8};
        int target = 7;

        int intex = -1;//目標位置
        int begin = 0;//開始位置
        int end = arr6.length - 1;
        int mid = (begin + end) / 2;

        //開始在結束位置之後或者重合,表示沒有這個元素
        if (begin >= end) {
            return -1;
        }

        while (true) {
            if (arr6[mid] == target) {
                intex = mid;
                break;
            } else {
                if (arr6[mid] > target) {
                    end = mid - 1;
                } else {
                    begin = mid + 1;
                }
            }
            mid = (begin + end) / 2;
        }
        return intex;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章