一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

為什么要使用數(shù)據(jù)結(jié)構(gòu)和算法

算法與數(shù)據(jù)結(jié)構(gòu) ? 來源:騰訊AlloyTeam Blog byTAT. ? 作者:h1654155167.6972 ? 2022-11-14 11:24 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

數(shù)據(jù)結(jié)構(gòu)是對在計(jì)算機(jī)內(nèi)存中(有時在磁盤中)的數(shù)據(jù)的一種安排。包括數(shù)組、鏈表、棧、二叉樹、哈希表等。

算法是對這些結(jié)構(gòu)中的數(shù)據(jù)進(jìn)行各種處理。比如,查找一條特殊的數(shù)據(jù)項(xiàng)或?qū)?shù)據(jù)進(jìn)行排序。

舉一個簡單的索引卡的存儲問題,每張卡片上寫有某人的姓名、電話、住址等信息,可以想象成一本地址薄,那么當(dāng)我們想要用計(jì)算機(jī)來處理的時候,問題來了:

●如何在計(jì)算機(jī)內(nèi)存中安放數(shù)據(jù)?

●所用算法適用于100張卡片,很好,那1000000張呢?

●所用算法能夠快速插入和刪除新的卡片嗎?

●能夠快速查找某一張卡片嗎?

●如何將卡片按照字母進(jìn)行排序呢?

事實(shí)上,大多數(shù)程序比地址簿要復(fù)雜得多,想象一下航班預(yù)訂系統(tǒng)的數(shù)據(jù)庫,存儲了旅客和航班的各種信息,需要許多數(shù)據(jù)結(jié)構(gòu)組成。如果您很清楚這些問題,那么請您對我的博文給出寶貴意見,如果不清楚,那么在我的博文中可以給您一些適當(dāng)?shù)闹敢?/p>

隨著NodeJs技術(shù)的發(fā)展,可以在服務(wù)器端使用javascript,控制MongoDB進(jìn)行持久化數(shù)據(jù)存儲。這就需要一些復(fù)雜的數(shù)據(jù)結(jié)構(gòu)和算法來提高程序的性能,僅僅使用數(shù)組和for循環(huán)來處理數(shù)據(jù)是遠(yuǎn)遠(yuǎn)不夠的。

數(shù)據(jù)結(jié)構(gòu)概述


數(shù)據(jù)結(jié)構(gòu) 優(yōu)點(diǎn) 缺點(diǎn)
數(shù)組 插入快,如果知道下標(biāo),可以非??斓拇嫒?/td> 查找慢,刪除慢,大小固定
有序數(shù)組 比無序數(shù)組查找快 刪除和插入慢,大小固定
提供“后進(jìn)先出”的存取方式 存取其他項(xiàng)很慢
隊(duì)列 提供“先進(jìn)先出”的存取方式 存取其他項(xiàng)很慢
鏈表 插入快,刪除快 查找慢
二叉樹 如果樹保持平衡,查找、插入、刪除都很快 刪除算法比較復(fù)雜
紅-黑樹 樹總是平衡的,查找、插入、刪除都很快 算法比較復(fù)雜
2-3-4樹 對磁盤存儲有用,樹總是平衡的,查找、插入、刪除都很快 算法比較復(fù)雜
哈希表 插入快,如果關(guān)鍵字已知則存取極快 刪除慢,如果不知道關(guān)鍵字則存取很慢,對存儲空間使用不充分
插入、刪除快,對最大數(shù)據(jù)項(xiàng)的存取很快 對其他數(shù)據(jù)項(xiàng)存取慢
對現(xiàn)實(shí)世界建模 有些算法慢且復(fù)雜

算法概述

對大多數(shù)數(shù)據(jù)結(jié)構(gòu)來說,都需要知道如何:

●插入一條新的數(shù)據(jù)項(xiàng)

●查找某一個特定的數(shù)據(jù)項(xiàng)

●刪除某一個特定的數(shù)據(jù)項(xiàng)

●遍歷某一數(shù)據(jù)結(jié)構(gòu)中的各數(shù)據(jù)項(xiàng)

●排序

另外,遞歸的概念在設(shè)計(jì)有些算法時,也是十分重要的。

javascript面向?qū)ο?a target="_blank">編程

博文中的數(shù)據(jù)結(jié)構(gòu)均被實(shí)現(xiàn)為對象,本節(jié)是為了給那些還沒有接觸過面向?qū)ο缶幊痰淖x者準(zhǔn)備的,但是,短短的一節(jié)并不能涵蓋所有面向?qū)ο缶幊痰乃枷?,僅僅是讓讀者能夠明白博文中的代碼示例。

Javascript是一種基于對象的語言,但是,又不是一種真正意義上的面向?qū)ο蟮恼Z言,因?yàn)闆]有class(類)的語法。

一、創(chuàng)建對象

創(chuàng)建對象就是把屬性(property)和方法(method)封裝成一個對象,或者從原型對象中實(shí)例化一個對象。

下面以實(shí)例化小狗對象為例,小狗具有名字和品種兩個屬性。

1、原始模式

var dog1 = {};

dog1.name = '二牛';

dog1.variety = '牛頭梗';

var dog2 = {};

dog2.name = '二狗';

dog2.variety = '哈士奇';

這樣封裝對象雖然簡單,但是有兩個缺點(diǎn),一是如果要創(chuàng)建多個實(shí)例的話,寫起來會比較麻煩,二是這種寫法并不能看出實(shí)例和原型之間有什么關(guān)系。

對原始模式進(jìn)行改進(jìn),

function Dog(name, variety) {

return {

name: name,

variety: variety

};

}

var dog1 = Dog('二牛', '牛頭梗');

var dog2 = Dog('二狗', '哈士奇');

改進(jìn)后解決了代碼重復(fù)的問題,但是dog1和dog2之間并沒有內(nèi)在聯(lián)系,不是來自于同一個原型對象。

2、構(gòu)造函數(shù)模式

構(gòu)造函數(shù),是內(nèi)部使用了this的函數(shù)。通過new構(gòu)造函數(shù)就能生成對象實(shí)例,并且this變量會綁定在實(shí)例對象上。使用構(gòu)造函數(shù)可以解決從原型對象構(gòu)建實(shí)例的問題。

function Dog(name, variety) {

this.name = name;

this.variety = variety;

}

var dog1 = new Dog('二牛', '牛頭梗');

var dog2 = new Dog('二狗', '哈士奇');

print(dog1.name); // 二牛

print(dog2.name); // 二狗

驗(yàn)證實(shí)例對象與原型對象之間的關(guān)系:

print(dog1.cunstructor === Dog); // true

print(dog2.cunstructor === Dog); // true

print(dog1 instanceof Dog); // true

print(dog2 instanceof Dog); // true

這樣看來構(gòu)造函數(shù)模式解決了原始模式的缺點(diǎn),但是它自己又引入了新的缺點(diǎn),就是有些時候存在浪費(fèi)內(nèi)存的問題。比如說,我們現(xiàn)在要給小狗這個對象添加一個公共的屬性“type”(種類)和一個公共方法“bark”(吠):

function Dog(name, variety) {

this.name = name;

this.variety = variety;

this.type = '犬科';

this.bark = function() {

print('汪汪汪');

}

}

再去實(shí)例化對象,

var dog1 = new Dog('二牛', '牛頭梗');

var dog2 = new Dog('二狗', '哈士奇');

print(dog1.type); // 犬科

dog1.bark(); // 汪汪汪

print(dog2.type); // 犬科

dog2.bark(); // 汪汪汪

這樣看似沒有問題,那么我寫另一段代碼來看一下問題所在,

print(dog1.bark() === dog2.bark()); // false

從中我們可以看出問題,那就是對于每個實(shí)例對象而言,type屬性和bark方法都是一樣的,但是每次創(chuàng)建新的實(shí)例,都要為其分配新的內(nèi)存空間,這樣做就會降低性能,浪費(fèi)空間,缺乏效率。

接下來我們就要思考怎樣讓這些所有實(shí)例對象都相同的內(nèi)容在內(nèi)存中只生成一次,并且讓所有實(shí)例的這些相同內(nèi)容都指向那個內(nèi)存地址?

3、Prototype模式

每一個構(gòu)造函數(shù)都有一個prototype屬性,指向另一個對象。這個對象的所有屬性和方法,都會被構(gòu)造函數(shù)的實(shí)例繼承。可以利用這一點(diǎn),把那些不變的屬性和方法,定義在prototype對象上。

function Dog(name, variety) {

this.name = name;

this.variety = variety;

}

Dog.prototype.type = '犬科';

Dog.prototype.bark = function() {

print('汪汪汪');

}

var dog1 = new Dog('二牛', '牛頭梗');

var dog2 = new Dog('二狗', '哈士奇');

print(dog1.type); // 犬科

dog1.bark(); // 汪汪汪

print(dog2.type); // 犬科

dog2.bark(); // 汪汪汪

print(dog1.bark() === dog2.bark()); // true

這里所有實(shí)例對象的type屬性和bark方法,都指向prototype對象,都是同一個內(nèi)存地址。

二、繼承

現(xiàn)在有一個動物的構(gòu)造函數(shù):

function Animal() {

this.feeling = 'happy';

}

有一個小狗的構(gòu)造函數(shù):

function Dog(name, variety) {

this.name = name;

this.variety = variety;

}

以下如不對Animal和Dog對象進(jìn)行重寫,則使用該代碼進(jìn)行代入,示例代碼中不再重復(fù)。

1、原型鏈繼承

Dog.prototype = new Animal();

Dog.prototype.constructor = Dog;

var dog = new Dog('二狗', '哈士奇');

print(dog.feeling); // happy

原型鏈繼承存在兩個問題:第一點(diǎn)是當(dāng)被繼承對象中包含引用類型的屬性時,該屬性會被所有實(shí)例對象共享,示例代碼如下;

function Animal() {

this.colors = ['red', 'green', 'blue'];

}

function Dog() {

}

// 繼承Animal

Dog.prototype = new Animal();

Dog.prototype.constructor = Dog;

var dog1 = new Dog();

dog1.colors.push('black');

print(dog1.colors); // red,green,blue,black

var dog2 = new Dog();

print(dog2.colors); // red,green,blue,black

第二點(diǎn)是不能在不影響所有實(shí)例對象的情況下,向父級構(gòu)造函數(shù)傳遞參數(shù),這一點(diǎn)不做示例,大家可以自行驗(yàn)證下;

2、構(gòu)造函數(shù)繼承

function Dog(name, variety) {

Animal.apply(this, arguments);

this.name = name;

this.variety = variety;

}

var dog = new Dog('二狗', '哈士奇');

print(dog.feeling); // happy

這是一種十分簡單的方法,使用apply或者call方法改變構(gòu)造函數(shù)作用域,將父函數(shù)的構(gòu)造函數(shù)綁定到子對象上。雖然解決了子對象向父對象傳遞參數(shù)的目的,但是借助構(gòu)造函數(shù),方法都在構(gòu)造函數(shù)中定義,函數(shù)的復(fù)用就無從談起。

3、構(gòu)造函數(shù)和原型鏈組合繼承

利用構(gòu)造函數(shù)實(shí)現(xiàn)對實(shí)例屬性的繼承,使用原型鏈完成對原型屬性和方法的繼承,避免了原型鏈和構(gòu)造函數(shù)的缺陷。

function Animal(name) {

this.name = name;

this.colors = ['red', 'green', 'blue'];

}

Animal.prototype.sayName = function() {

print(this.name);

};

function Dog(name, age) {

// 繼承屬性

Animal.call(this, name);

this.age = age;

}

// 繼承方法

Dog.prototype = new Animal();

Dog.prototype.constructor = Dog;

Dog.prototype.sayAge = function() {

print(this.age);

}

var dog1 = new Dog('二狗', 1);

dog1.colors.push('black');

print(dog1.colors); // red,green,blue,black

dog1.sayName(); // 二狗

dog1.sayAge(); // 1

var dog2 = new Dog('二牛', 2);

print(dog2.colors); // red,green,blue

dog2.sayName(); // 二牛

dog2.sayAge(); // 2

4、YUI式繼承

由原型鏈繼承延伸而來,避免了實(shí)例對象的prototype指向同一個對象的缺點(diǎn)(Dog.prototype和Animal.prototype指向了同一個對象,那么任何對Dog.prototype的修改,都會反映到Animal.prototype)。讓Dog跳過Animal,直接繼承Animal.prototype,這樣省去執(zhí)行和創(chuàng)建Animal實(shí)例,提高了效率。利用一個空對象作為媒介,空對象幾乎不占用內(nèi)存,示例如下:

function Animal() {}

Animal.prototype.feeling = 'happy';

function extend(Child, Parent) {

var F = function(){};

F.prototype = Parent.prototype;

Child.prototype = new F();

Child.prototype.constructor = Child;

}

extend(Dog, Animal);

var dog = new Dog('二狗', '哈士奇');

print(dog.feeling); // happy

5、拷貝繼承(淺拷貝和深拷貝)

把父對象的屬性和方法,全部拷貝給子對象,也能實(shí)現(xiàn)繼承。

① 淺復(fù)制

function Animal() {}

Animal.prototype.feeling = 'happy';

function extend(Child, Parent) {

var p = Parent.prototype;

var c = Child.prototype;

for (var i in p) {

c[i] = p[i];

}

}

extend(Dog, Animal);

var dog = new Dog('二狗', '哈士奇');

print(dog.feeling); // happy

但是,這樣的拷貝有一個問題。那就是,如果父對象的屬性等于數(shù)組或另一個對象,那么實(shí)際上,子對象獲得的只是一個內(nèi)存地址,而不是真正拷貝,因此存在父對象被篡改的可能,比如在上例中適當(dāng)位置添加如下代碼會發(fā)現(xiàn):

Animal.prototype.colors = ['red', 'green', 'blue'];

Dog.colors.push('black');

print(Dog.colors); // red,green,blue,black

print(Animal.colors); // red,green,blue,black

當(dāng)然,這也是jquery早期實(shí)現(xiàn)繼承的方式。

② 深復(fù)制

function Animal() {}

Animal.prototype.feeling = 'happy';

function deepCopy(Child, Parent) {

var p = Parent.prototype;

var c = Child.prototype;

for (var i in p) {

if (typeof p[i] === 'object') {

c[i] = (p[i].constructor === Array) ? [] : {};

deepCopy(p[i], c[i]);

} else {

c[i] = p[i];

}

}

}

deepCopy(Dog, Animal);

var dog = new Dog('二狗', '哈士奇');

print(dog.feeling); // happy

深拷貝,能夠?qū)崿F(xiàn)真正意義上的數(shù)組和對象的拷貝。這時,在子對象上修改屬性(引用類型),就不會影響到父元素了。這也是目前jquery使用的繼承方式。

JavaScript數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)

可以下載javascript shell(進(jìn)入該頁面并滾動到底部,選擇系統(tǒng)版本進(jìn)行下載)使用shell交互模式編寫代碼并執(zhí)行。博文中主要利用javascript中數(shù)組和對象的特性對數(shù)據(jù)結(jié)構(gòu)和算法進(jìn)行描述,在描述原理的同時,使用javascript實(shí)現(xiàn)示例代碼。只有真正明白數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ),才能對其應(yīng)用自如。

審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4709

    瀏覽量

    95358
  • 數(shù)據(jù)結(jié)構(gòu)

    關(guān)注

    3

    文章

    573

    瀏覽量

    40745

原文標(biāo)題:為什么要使用數(shù)據(jù)結(jié)構(gòu)和算法(程序=數(shù)據(jù)結(jié)構(gòu)+算法)

文章出處:【微信號:TheAlgorithm,微信公眾號:算法與數(shù)據(jù)結(jié)構(gòu)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    程序設(shè)計(jì)與數(shù)據(jù)結(jié)構(gòu)

    的地址)出發(fā),采用推導(dǎo)的方式,深入淺出的分析了廣大C程序員學(xué)習(xí)和開發(fā)中遇到的難點(diǎn)。 2. 從方法論的高度對C語言在數(shù)據(jù)結(jié)構(gòu)算法方面的應(yīng)用進(jìn)行了深入講解和闡述。 3. 講解了絕大多數(shù)C程序員開發(fā)
    發(fā)表于 05-13 16:45

    請問K230D怎么將攝像頭采集的視頻數(shù)據(jù)通過串口輸出?

    我連了個WiFi模塊,想要將攝像頭采集的視頻數(shù)據(jù)通過串口發(fā)送出去。之前都是用的STM32,不太會MicroPython,搞不懂對象的數(shù)據(jù)結(jié)構(gòu),求教。
    發(fā)表于 04-28 06:16

    復(fù)合機(jī)器人為什么要使用單點(diǎn)糾偏算法?

    復(fù)合機(jī)器人單點(diǎn)糾偏算法
    的頭像 發(fā)表于 04-20 14:59 ?230次閱讀
    復(fù)合機(jī)器人為什么<b class='flag-5'>要使</b>用單點(diǎn)糾偏<b class='flag-5'>算法</b>?

    C++學(xué)到什么程度可以找工作?

    管理、引用、面向?qū)ο缶幊蹋惻c對象、繼承、多態(tài))、模板和STL(標(biāo)準(zhǔn)模板庫)等。 2. **數(shù)據(jù)結(jié)構(gòu)算法**:能夠高效地實(shí)現(xiàn)并使用各種數(shù)據(jù)結(jié)構(gòu)(如數(shù)組、鏈表、棧、隊(duì)列、樹、圖等)和算法
    發(fā)表于 03-13 10:19

    請問STM32部署機(jī)器學(xué)習(xí)算法硬件至少要使用哪個系列的芯片?

    STM32部署機(jī)器學(xué)習(xí)算法硬件至少要使用哪個系列的芯片?
    發(fā)表于 03-13 07:34

    EtherCAT數(shù)據(jù)結(jié)構(gòu)解析

    物理層和常規(guī)的以太網(wǎng)卡,通過獨(dú)特的數(shù)據(jù)結(jié)構(gòu)和處理機(jī)制,實(shí)現(xiàn)了基于EtherNet的實(shí)時控制。本文將深入探討EtherCAT的數(shù)據(jù)結(jié)構(gòu),從幀的組成、子報(bào)文的
    的頭像 發(fā)表于 02-02 17:42 ?1310次閱讀

    ADS1299數(shù)據(jù)全0是什么原因?qū)е碌模?/a>

    : 第一是因?yàn)槲覀兲匾馀渲昧薌PIO口 使得ADS1299上傳的數(shù)據(jù)的包頭里關(guān)于GPIO口這四位的是正常的 即使是不正常工作的4片 SPI的數(shù)據(jù)結(jié)構(gòu)也是正常的 第二是因?yàn)槲业牡诙筒徽9ぷ髁?但是它依舊
    發(fā)表于 12-10 07:01

    【「從算法到電路—數(shù)字芯片算法的電路實(shí)現(xiàn)」閱讀體驗(yàn)】+內(nèi)容簡介

    的乘法器和除法器設(shè)計(jì),在不同專業(yè)芯片領(lǐng)域有著廣泛應(yīng)用的數(shù)字信號發(fā)生器、復(fù)數(shù)求模求角度運(yùn)算器、普通濾波器、E△ADC中使用的抽取濾波器、基于 E△結(jié)構(gòu)實(shí)現(xiàn)的小數(shù)倍分頻器、CRC校驗(yàn)器等。每個電路均給出了算法
    發(fā)表于 11-21 17:14

    DDC264配置寄存器數(shù)據(jù)寫入和320 DCLK時鐘脈沖后的回讀數(shù)據(jù)結(jié)構(gòu)是什么?

    配置寄存器數(shù)據(jù)寫入和320 DCLK時鐘脈沖后的回讀數(shù)據(jù)結(jié)構(gòu)是什么? 根據(jù)注和表9,16位配置寄存器數(shù)據(jù),4位修訂ID, 300位校驗(yàn)?zāi)J?,怎么可能?024 TOTAL READBACK BITS, format = 0
    發(fā)表于 11-19 07:58

    視覺軟件HALCON的數(shù)據(jù)結(jié)構(gòu)

    在研究機(jī)器視覺算法之前,我們需要先了解機(jī)器視覺應(yīng)用中涉及的基本數(shù)據(jù)結(jié)構(gòu)。Halcon數(shù)據(jù)結(jié)構(gòu)主要有圖像參數(shù)和控制參數(shù)兩類參數(shù)。圖像參數(shù)包括:image、region、XLD,控制參數(shù)包括:string、integer、real、
    的頭像 發(fā)表于 11-14 10:20 ?1283次閱讀
    視覺軟件HALCON的<b class='flag-5'>數(shù)據(jù)結(jié)構(gòu)</b>

    U盤存儲并聯(lián),算法交互輸出

    \"algorithm.h\"http:// 自定義的算法庫 #define NUM_UDISKS 4 #define DATA_SIZE 1024 // 模擬U盤模塊的數(shù)據(jù)結(jié)構(gòu) typedef
    發(fā)表于 10-28 07:36

    人員軌跡分析算法有哪些?

    時段等。這些信息可以對城市規(guī)劃、交通管理、公共安全等方面具有重要的指導(dǎo)意義。而為了實(shí)現(xiàn)人員軌跡分析,我們需要使用一些專門的算法和技術(shù)。 下面是幾種常用的人員軌跡分析算法: 1. 基于密度的聚類
    的頭像 發(fā)表于 09-26 10:42 ?928次閱讀

    架構(gòu)師日記-從數(shù)據(jù)庫發(fā)展歷程到數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)探析

    數(shù)據(jù)庫發(fā)展史 起初,數(shù)據(jù)的管理方式是文件系統(tǒng),數(shù)據(jù)存儲在文件中,數(shù)據(jù)管理和維護(hù)都由程序員完成。后來發(fā)展出樹形結(jié)構(gòu)和網(wǎng)狀
    的頭像 發(fā)表于 09-25 11:20 ?1153次閱讀
    架構(gòu)師日記-從<b class='flag-5'>數(shù)據(jù)</b>庫發(fā)展歷程到<b class='flag-5'>數(shù)據(jù)結(jié)構(gòu)</b>設(shè)計(jì)探析

    TDA4VM上的硬件加速運(yùn)動恢復(fù)結(jié)構(gòu)算法

    電子發(fā)燒友網(wǎng)站提供《TDA4VM上的硬件加速運(yùn)動恢復(fù)結(jié)構(gòu)算法.pdf》資料免費(fèi)下載
    發(fā)表于 09-24 11:39 ?0次下載
    TDA4VM上的硬件加速運(yùn)動恢復(fù)<b class='flag-5'>結(jié)構(gòu)</b><b class='flag-5'>算法</b>

    嵌入式常用數(shù)據(jù)結(jié)構(gòu)有哪些

    在嵌入式編程中,數(shù)據(jù)結(jié)構(gòu)的選擇和使用對于程序的性能、內(nèi)存管理以及開發(fā)效率都具有重要影響。嵌入式系統(tǒng)由于資源受限(如處理器速度、內(nèi)存大小等),因此對數(shù)據(jù)結(jié)構(gòu)的選擇和使用尤為關(guān)鍵。以下是嵌入式編程中常用的幾種數(shù)據(jù)結(jié)構(gòu),結(jié)合具體特點(diǎn)和
    的頭像 發(fā)表于 09-02 15:25 ?1040次閱讀