部落格

  • 【從今天開始好好學數據結構01】數組

    【從今天開始好好學數據結構01】數組

    面試的時候,常常會問數組和鏈表的區別,很多人都回答說,“鏈表適合插入、刪除,時間複雜度O(1);數組適合查找,查找時間複雜度為O(1)”。實際上,這種表述是不準確的。數組是適合查找操作,但是查找的時間複雜度並不為O(1)。即便是排好序的數組,你用二分查找,時間複雜度也是O(logn)。所以,正確的表述應該是,數組支持隨機訪問,根據下標隨機訪問的時間複雜度為O(1)。

    每一種編程語言中,基本都會有數組這種數據類型。不過,它不僅僅是一種編程語言中的數據類型,還是一種最基礎的數據結構。儘管數組看起來非常基礎、簡單,但是我估計很多人都並沒有理解這個基礎數據結構的精髓。在大部分編程語言中,數組都是從0開始編號的,但你是否下意識地想過,為什麼數組要從0開始編號,而不是從1開始呢? 從1開始不是更符合人類的思維習慣嗎?帶着這個問題來學習接下來的內容,帶着問題去學習往往效果會更好!!!

    什麼是數組?我估計你心中已經有了答案。不過,我還是想用專業的話來給你做下解釋。數組(Array)是一種線性表數據結構。它用一組連續的內存空間,來存儲一組具有相同類型的數據。這個定義里有幾個關鍵詞,理解了這幾個關鍵詞,我想你就能徹底掌握數組的概念了。下面就從我的角度分別給你“點撥”一下。

    第一是線性表(Linear List)。顧名思義,線性表就是數據排成像一條線一樣的結構。每個線性表上的數據最多只有前和后兩個方向。其實除了數組,鏈表、隊列、棧等也是線性表結構。而與它相對立的概念是非線性表,比如二叉樹、堆、圖等。之所以叫非線性,是因為,在非線性表中,數據之間並不是簡單的前後關係。

    第二個是連續的內存空間和相同類型的數據。正是因為這兩個限制,它才有了一個堪稱“殺手鐧”的特性:“隨機訪問”。但有利就有弊,這兩個限制也讓數組的很多操作變得非常低效,比如要想在數組中刪除、插入一個數據,數組為了保持內存數據的連續性,會導致插入、刪除這兩個操作比較低效,相反的數組查詢則高效

    數組java代碼:

    package array;
    
    /**
     * 1) 數組的插入、刪除、按照下標隨機訪問操作;
     * 2)數組中的數據是int類型的;
     *
     * Author: Zheng
     * modify: xing, Gsealy
     */
    public class Array {
        //定義整型數據data保存數據
        public int data[];
        //定義數組長度
        private int n;
        //定義中實際個數
        private int count;
    
        //構造方法,定義數組大小
        public Array(int capacity){
            this.data = new int[capacity];
            this.n = capacity;
            this.count=0;//一開始一個數都沒有存所以為0
        }
    
        //根據索引,找到數據中的元素並返回
        public int find(int index){
            if (index<0 || index>=count) return -1;
            return data[index];
        }
    
        //插入元素:頭部插入,尾部插入
        public boolean insert(int index, int value){
            //數組中無元素 
    
            //if (index == count && count == 0) {
            //    data[index] = value;
            //    ++count;
            //    return true;
            //}
    
            // 數組空間已滿
            if (count == n) {
                System.out.println("沒有可插入的位置");
                return false;
            }
            // 如果count還沒滿,那麼就可以插入數據到數組中
            // 位置不合法
            if (index < 0||index > count ) {
                System.out.println("位置不合法");
                return false;
            }
            // 位置合法
            for( int i = count; i > index; --i){
                data[i] = data[i - 1];
            }
            data[index] = value;
            ++count;
            return true;
        }
        //根據索引,刪除數組中元素
        public boolean delete(int index){
            if (index<0 || index >=count) return false;
            //從刪除位置開始,將後面的元素向前移動一位
            for (int i=index+1; i<count; ++i){
                data[i-1] = data[i];
            }
            //刪除數組末尾元素  這段代碼不需要也可以
            /*int[] arr = new int[count-1];
            for (int i=0; i<count-1;i++){
                arr[i] = data[i];
            }
            this.data = arr;*/
    
            --count;
            return true;
        }
        public void printAll() {
            for (int i = 0; i < count; ++i) {
                System.out.print(data[i] + " ");
            }
            System.out.println();
        }
    
        public static void main(String[] args) {
            Array array = new Array(5);
            array.printAll();
            array.insert(0, 3);
            array.insert(0, 4);
            array.insert(1, 5);
            array.insert(3, 9);
            array.insert(3, 10);
            //array.insert(3, 11);
            array.printAll();
        }
    }

    GenericArray數組代碼

    public class GenericArray<T> {
        private T[] data;
        private int size;
    
        // 根據傳入容量,構造Array
        public GenericArray(int capacity) {
            data = (T[]) new Object[capacity];
            size = 0;
        }
    
        // 無參構造方法,默認數組容量為10
        public GenericArray() {
            this(10);
        }
    
        // 獲取數組容量
        public int getCapacity() {
            return data.length;
        }
    
        // 獲取當前元素個數
        public int count() {
            return size;
        }
    
        // 判斷數組是否為空
        public boolean isEmpty() {
            return size == 0;
        }
    
        // 修改 index 位置的元素
        public void set(int index, T e) {
            checkIndex(index);
            data[index] = e;
        }
    
        // 獲取對應 index 位置的元素
        public T get(int index) {
            checkIndex(index);
            return data[index];
        }
    
        // 查看數組是否包含元素e
        public boolean contains(T e) {
            for (int i = 0; i < size; i++) {
                if (data[i].equals(e)) {
                    return true;
                }
            }
            return false;
        }
    
        // 獲取對應元素的下標, 未找到,返回 -1
        public int find(T e) {
            for ( int i = 0; i < size; i++) {
                if (data[i].equals(e)) {
                    return i;
                }
            }
            return -1;
        }
    
    
        // 在 index 位置,插入元素e, 時間複雜度 O(m+n)
        public void add(int index, T e) {
            checkIndex(index);
            // 如果當前元素個數等於數組容量,則將數組擴容為原來的2倍
            if (size == data.length) {
                resize(2 * data.length);
            }
    
            for (int i = size - 1; i >= index; i--) {
                data[i + 1] = data[i];
            }
            data[index] = e;
            size++;
        }
    
        // 向數組頭插入元素
        public void addFirst(T e) {
            add(0, e);
        }
    
        // 向數組尾插入元素
        public void addLast(T e) {
            add(size, e);
        }
    
        // 刪除 index 位置的元素,並返回
        public T remove(int index) {
            checkIndexForRemove(index);
    
            T ret = data[index];
            for (int i = index + 1; i < size; i++) {
                data[i - 1] = data[i];
            }
            size --;
            data[size] = null;
    
            // 縮容
            if (size == data.length / 4 && data.length / 2 != 0) {
                resize(data.length / 2);
            }
    
            return ret;
        }
    
        // 刪除第一個元素
        public T removeFirst() {
            return remove(0);
        }
    
        // 刪除末尾元素
        public T removeLast() {
            return remove(size - 1);
        }
    
        // 從數組中刪除指定元素
        public void removeElement(T e) {
            int index = find(e);
            if (index != -1) {
                remove(index);
            }
        }
    
        @Override
        public String toString() {
            StringBuilder builder = new StringBuilder();
            builder.append(String.format("Array size = %d, capacity = %d \n", size, data.length));
            builder.append('[');
            for (int i = 0; i < size; i++) {
                builder.append(data[i]);
                if (i != size - 1) {
                    builder.append(", ");
                }
            }
            builder.append(']');
            return builder.toString();
        }
    
    
        // 擴容方法,時間複雜度 O(n)
        private void resize(int capacity) {
            T[] newData = (T[]) new Object[capacity];
    
            for (int i = 0; i < size; i++) {
                newData[i] = data[i];
            }
            data = newData;
        }
    
        private void checkIndex(int index) {
            if (index < 0 || index > size) {
                throw new IllegalArgumentException("Add failed! Require index >=0 and index <= size.");
            }
        }
    
        private void checkIndexForRemove(int index) {
            if(index < 0 || index >= size) {
                throw new IllegalArgumentException("remove failed! Require index >=0 and index < size.");
            }
        }
    }

    到這裏,就回溯最初的問題:

    從數組存儲的內存模型上來看,“下標”最確切的定義應該是“偏移(offset)”。前面也講到,如果用a來表示數組的首地址,a[0]就是偏移為0的位置,也就是首地址,a[k]就表示偏移k個type_size的位置,所以計算a[k]的內存地址只需要用這個公式:

    a[k]_address = base_address + k * type_size

    但是,如果數組從1開始計數,那我們計算數組元素a[k]的內存地址就會變為:

    a[k]_address = base_address + (k-1)*type_size

    對比兩個公式,我們不難發現,從1開始編號,每次隨機訪問數組元素都多了一次減法運算,對於CPU來說,就是多了一次減法指令。那你可以思考一下,類比一下,二維數組的內存尋址公式是怎樣的呢?有興趣的可以在評論區評論出來哦QAQ

    數組作為非常基礎的數據結構,通過下標隨機訪問數組元素又是其非常基礎的編程操作,效率的優化就要盡可能做到極致。所以為了減少一次減法操作,數組選擇了從0開始編號,而不是從1開始。
    不過我認為,上面解釋得再多其實都算不上壓倒性的證明,說數組起始編號非0開始不可。所以我覺得最主要的原因可能是歷史原因。

    關於數組,它可以說是最基礎、最簡單的數據結構了。數組用一塊連續的內存空間,來存儲相同類型的一組數據,最大的特點就是支持隨機訪問,但插入、刪除操作也因此變得比較低效,平均情況時間複雜度為O(n)。在平時的業務開發中,我們可以直接使用編程語言提供的容器類,但是,如果是特別底層的開發,直接使用數組可能會更合適。

    如果本文對你有一點點幫助,那麼請點個讚唄,謝謝~

    最後,若有不足或者不正之處,歡迎指正批評,感激不盡!如果有疑問歡迎留言,絕對第一時間回復!

    歡迎各位關注我的公眾號,一起探討技術,嚮往技術,追求技術,說好了來了就是盆友喔…

    本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包"嚨底家"

    網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

    ※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

    南投搬家費用,距離,噸數怎麼算?達人教你簡易估價知識!

  • 澳洲動物園抗野火 園長帶猴子老虎回家避難

    摘錄自2020年1月2日中央社雪梨報導

    在毀滅性野火肆虐澳洲各地的情況下,新南威爾斯省(New South Wales)一家小型動物園,成功保障園區所有動物的安全。

    英國廣播公司(BBC)報導,摩哥動物園(Mogo Zoo)的靈長類動物數量在澳洲數一數二,園區內還有斑馬、犀牛與長頸鹿等大型動物。但當動物園處在野火第一線時,飼養人員仍成功保護200隻動物全數未受傷害。

    新南威爾斯省12月31日對動物園所在區域下達疏散命令,但職員仍決定留下來保護動物。動物園園長史戴普斯表示,動物園能倖存下來,都是因為事先做好確實規劃。飼養人員先把區內所有可燃物都搬走,接著再遷移動物。

    諸如獅子、老虎與紅毛猩猩等大型動物都被趕進夜間圍欄內,以確保牠們安全、情緒平靜。但小型動物就需要特殊庇護,所以園長史戴普斯決定把牠們通通帶回自家,至於長頸鹿和斑馬則留在自己的圍欄裡,因為牠們體型夠大,可以避開火源。

    史戴普斯說,長頸鹿和斑馬是園內唯一承受壓力的動物,但壓力來源並非火災,而是飼養人員匆忙開車四處滅火,動物園員工事先準備數十萬公升的水,並把水置於車上的小型水槽四處移動,看到火就予以撲滅。他形容自己的團隊日以繼夜投入工作,若非員工的英勇作為,動物園早就陷入火海。

    本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※帶您來了解什麼是 USB CONNECTOR  ?

    ※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

    ※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

    ※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

    ※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

  • 帛琉禁用有害珊瑚礁防曬乳 違者罰1000美元

    摘錄自2020年1月1日中央社科羅報導

    太平洋島國帛琉1日起實施一項開創性禁令,不准使用含有對珊瑚礁有害成分的防曬乳液,違者罰1000美元。帛琉實施嚴格環保措施,新設全球最大海洋保護區之一也自此生效。

    法新社報導,帛琉總統雷蒙傑索(Tommy Remengesau)表示,帛琉人「必須尊重環境,因為環境是孕育生命之所,沒有環境,帛琉就沒人能倖存」。

    自2020年元旦起,在帛琉任何對珊瑚礁具有毒性的防曬乳液,不管是攜帶入境或販售,都會被沒收,並處罰持有者1000美元罰款。

    雷蒙傑索表示:「帛琉重要生物棲地到處都發現了防曬乳液中的有毒化學物質,在帛琉最知名的生物組織中也有。我們不介意成為第一個禁用這些化學物質的國家,我們也會為傳達這個訊息盡一份力。」

    除了這項禁令之外,帛琉的海洋保護區也自1日起生效,在新規定之下,帛琉的專屬經濟區(EEZ)有80%不准捕魚或從事其他海洋活動,包括採礦和取鯊魚鰭。

    本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※為什麼 USB CONNECTOR 是電子產業重要的元件?

    網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

    ※想要讓你的商品成為最夯、最多人討論的話題?網頁設計公司讓你強力曝光

    ※想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!

  • 海洋吸塵器完成首次任務 下一步:為垃圾再製品建立透明「價值鏈」

    環境資訊中心綜合外電;姜唯 編譯;林大利 審校

    本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

    ※評比前十大台北網頁設計台北網站設計公司知名案例作品心得分享

    ※智慧手機時代的來臨,RWD網頁設計已成為網頁設計推薦首選

    ※評比南投搬家公司費用收費行情懶人包大公開

  • 募資拆壩有成 烏克蘭濕地迅速恢復

    環境資訊中心綜合外電;姜唯 編譯;林大利 審校

    本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包"嚨底家"

    網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

    ※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

    南投搬家費用,距離,噸數怎麼算?達人教你簡易估價知識!

  • 武漢27例不明肺炎 均與華南海鮮市場有關

    摘錄自2020年1月2日公視報導

    中國武漢爆發27例不明肺炎案例,引起各界關注,爆發疫情的華南海鮮市場也已休市進行消毒。中國官方到今天傍晚為止,尚未公布檢驗結果。而香港屯門醫院也傳出收到一名曾去過武漢的女性肺炎病患,經過檢驗後,初步排除是SARS。

    日前武漢爆發27例不明原因的病毒型肺炎,其中有7例病情嚴重。根據中國媒體報導,有肺炎患者一開始以為只是感冒,吃了感冒藥卻無效,持續發病十幾天。目前這27名病患都集中隔離治療。而爆發疫情的華南海鮮市場在1號也張貼公告宣布,即日起休市整治,進行衛生消毒工作。衛福部疾管署署長周志浩表示,「如果陸方在這部分,我們的疫情掌握覺得還是不足的時候,我們會跟陸方提出交涉。希望我們能夠派遣同仁,或者是專家實地了解情形。」

    此外,香港屯門醫院也收治一名女性肺炎個案,日前曾經到過武漢,出現發燒及上呼吸道感染症狀。香港屯門區議員張可森則透過臉書表示,經院方證實,這名女病患的檢驗結果,對SARS和禽流感病毒呈陰性反應,初步排除這兩種可能。

    本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※想知道網站建置網站改版該如何進行嗎?將由專業工程師為您規劃客製化網頁設計後台網頁設計

    ※不管是台北網頁設計公司台中網頁設計公司,全省皆有專員為您服務

    ※Google地圖已可更新顯示潭子電動車充電站設置地點!!

    ※帶您來看台北網站建置台北網頁設計,各種案例分享

  • 印尼雅加達暴雨侵襲 洪災土石流釀21死

    摘錄自2020年1月2日公視報導

    印尼首都雅加達跨年夜遭暴雨侵襲,引發洪水和土石流,目前至少造成21人死亡。

    汽機車被洪水淹得滅頂,搜救人員出動橡皮艇挨家挨戶搜救,印尼首都雅加達跨年夜下起暴雨,引發七年來最嚴重水災,水深達到3公尺高,部分地鐵和火車停駛,一座機場也被迫臨時關閉,不少旅客滯留到早上,印尼總統佐科威表示已經動員12萬名搜救人員,全力救災。

    佐科威說:「許多公共設施被淹沒,包括哈里姆柏達那庫蘇馬機場、芝甘北公路。」此外,雅加達郊區發生土石流災情,一名16歲高中生遭雷擊死亡,當局警告在雨季四月結束前,可能將再發生洪災。

    本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

    ※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

    ※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

    南投搬家前需注意的眉眉角角,別等搬了再說!

  • 澳洲山火波及新西蘭 冰川變天呈焦糖色 恐加速冰塊融化

    摘錄自2020年1月3日香港01報導

    澳洲五省受高溫及乾旱天氣影響,自9月起多處發生山火,造成至少18人死亡,另有數人下落不明,逾200間房間被燒毀,其中新南威爾士省受災最嚴重,澳洲當局預期周末災情更加嚴重。

    正當澳洲正積極撲救山火之際,從新南威爾士省及維多利亞省吹至的煙霧,於除夕日起飄浮至2,000公里外的新西蘭,其中南島多個著名冰川,如塔斯曼 (Tasman)、法蘭士·約瑟夫(Franz Josef),以及福克(Fox)首先受到影響;而濃煙更慢慢飄散至北島,令當地天色驟眼看「陰森恐怖」。

    冰川旅行社Alpine Guides負責人麥克布賴德(Arthur McBride)表示,南島多個冰川周三起天色變得非常差,他坦言在該區舉辦旅行團多時,亦從未見過類似情境,「周三下午尤其差,那股如燒木頭的氣味非常濃烈。」

    另外,在新西蘭最高山庫克(Mount Cook)經營滑雪飛機和直升機生意的布爾特(Dan Burt)則發現,濃煙尚未瀰漫當地時,他們早於數周前已發現塔斯曼冰川變色。布爾特續指,雖然觀光直升機目前仍能起飛,但對於旅客而言絕是精彩的體驗。

    新西蘭氣象局Weather Watch周四發布衛星圖,顯示煙霧如何從澳洲海岸,再跨越塔斯曼海飄散至新西蘭。

    旅遊勝地皇后鎮(Queenstown)多座山峰,即距離冰川更南位置,同樣被濃霧覆蓋。另外,南島小鎮達尼丁(Dunedin)過去數天都突然「變天」,有人一覺醒來赫見天氣變得昏暗,黃昏時份更呈刺眼的金黃色。北島周四亦受濃煙及刺鼻燒焦味影響,有居民形容大海曾現異常的金色光芒;天空多雲;當太陽破曉時亦呈橙色。」

    本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

    網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

    ※想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!

  • 北京解讀純電動客車補貼政策

    今天(10日)上午,北京市對購買純電動客車有關財政政策進行解讀。北京提供1∶1市級財政補貼,兩級財政補貼總額最高不超過車輛銷售價格的60%。  
    補貼範圍   行政事業單位使用財政資金購買純電動客車不納入通知規定的補助範圍。地方純電動客車補貼,直接撥付到汽車生產企業,消費者按銷售價格扣減補助後支付。  
    按車長補貼   2015年純電動客車推廣應用補助標準按車長執行,車長超過10米的車補助標準最高,達50萬元 2016年補助標準中引入車長在10米-12米之間的“標準車”概念,在單位載品質能量消耗量小於0.25、續駛里程超過250公里時,補貼金額最多,可達50萬 12米以上、雙層客車參照標準車1.2倍給予補助 8-10米客車,按照標準車0.8倍給予補助 6-8米客車,參照標準車的0.5倍給予補貼 6米及以下客車參照標準車的0.2倍給予補助 2017年補助標準在2016年基礎上下調20%   面向全國開放純電動客車市場,北京市採用備案制管理,只要納入國家《節能與新能源汽車示範推廣應用工程推薦車型目錄》和《免征車輛購置稅的新能源汽車車型目錄》,完成企業和產品備案,即可在京銷售。   凡是滿足交通行業相關規定的運營企業均可購置、運營純電動客車。鼓勵公交、公路客運、旅遊等領域的企業積極開展純電動客車示範推廣工作;積極鼓勵開展各種純電動客車車型示範應用。

    本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※帶您來了解什麼是 USB CONNECTOR  ?

    ※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

    ※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

    ※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

    ※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

  • 中國有望成全球最大電動車市場

    11日,在中國汽車工業協會新聞發佈會上,中汽協常務副會長兼秘書長董揚指出,新能源汽車正從示範向增長階段發展,逐漸成為中國汽車行業的重要組成部分,中國有望成為全球最大的電動汽車市場。   中國汽車工業協會的最新資料顯示,1-7月,新能源汽車生產95530輛,銷售89549輛,同比分別增長2.5倍和2.6倍;7月當月,新能源汽車銷售同比增長3.3倍。   據《中國汽車消費者白皮書》分析,政策導向、續航里程、充電時間和售後保障將成為決定新能源車發展速度的主要因素。

    本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※為什麼 USB CONNECTOR 是電子產業重要的元件?

    網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

    ※想要讓你的商品成為最夯、最多人討論的話題?網頁設計公司讓你強力曝光

    ※想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!