摘要:程序設(shè)計數(shù)據(jù)結(jié)構(gòu)算法數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)就是關(guān)系,沒錯,就是數(shù)據(jù)元素相互之間存在的一種或多種特定關(guān)系的集合。物理結(jié)構(gòu)是指數(shù)據(jù)的邏輯結(jié)構(gòu)在計算機中的存儲形式。
程序設(shè)計=數(shù)據(jù)結(jié)構(gòu)+算法數(shù)據(jù)結(jié)構(gòu)
數(shù)據(jù)結(jié)構(gòu)就是關(guān)系,沒錯,就是數(shù)據(jù)元素相互之間存在的一種或多種特定關(guān)系的集合。
傳統(tǒng)上,我們把數(shù)據(jù)結(jié)構(gòu)分為邏輯結(jié)構(gòu)和物理結(jié)構(gòu)。
邏輯結(jié)構(gòu):是指數(shù)據(jù)對象中數(shù)據(jù)元素之間的相互關(guān)系,也是我們今后最需要關(guān)注和討論的問題。
物理結(jié)構(gòu):是指數(shù)據(jù)的邏輯結(jié)構(gòu)在計算機中的存儲形式。
常用的數(shù)據(jù)結(jié)構(gòu)有:
數(shù)組,隊列(queue),堆(heap),棧(stack),鏈表(linked list ),樹(tree),圖(graph)和散列表(hash)
棧(stack):運算只在表的一端進行;隊列(Queue):運算只在表的兩端進行。
隊列(queue)是只允許在一端進行插入操作,而在另一端進行刪除操作的線性表。
與棧相反,隊列是一種先進先出(First In First Out, FIFO)的線性表。
與棧相同的是,隊列也是一種重要的線性結(jié)構(gòu),實現(xiàn)一個隊列同樣需要順序表或鏈表作為基礎(chǔ)。
四大結(jié)構(gòu)集合結(jié)構(gòu)
線性結(jié)構(gòu)
樹形結(jié)構(gòu)
圖形結(jié)構(gòu)
數(shù)據(jù)元素的存儲結(jié)構(gòu)形式有兩種:順序存儲和鏈式存儲。
例如我們編程語言的數(shù)組結(jié)構(gòu)就是這樣滴。
鏈式存儲結(jié)構(gòu):是把數(shù)據(jù)元素存放在任意的存儲單元里,這組存儲單元可以是連續(xù)的,也可以是不連續(xù)的。
鏈式存儲結(jié)構(gòu)
線性表:就好像是排隊一樣,具有線一樣性質(zhì)的結(jié)構(gòu),它是由零個或多個數(shù)據(jù)元素組成的有限序列。
若元素存在多個,則第一個元素?zé)o前驅(qū),而最后一個元素?zé)o后繼,其他元素都有且只有一個前驅(qū)和后繼。
若將線性表記為(a1,…,ai-1,ai,ai+1,…an),則表中ai-1領(lǐng)先于ai,ai領(lǐng)先于ai+1,稱ai-1是ai的直接前驅(qū)元素,ai+1是ai的直接后繼元素。
數(shù)據(jù)類型數(shù)據(jù)類型:是指一組性質(zhì)相同的值的集合及定義在此集合上的一些操作的總稱。
例如很多編程語言的整型,浮點型,字符型這些指的就是數(shù)據(jù)類型。
在計算機中,內(nèi)存不是無限大的,如果要計算或處理一些較大的數(shù)時,需要開辟較大的內(nèi)存空間,于是就要對計算機進行數(shù)據(jù)類型分類,分出多種數(shù)據(jù)類型來適合各種不同的計算條件差異。
在C語言中,數(shù)據(jù)類型可以分為:
原子類型:不可以再分解的基本類型,例如整型、浮點型、字符型等。
結(jié)構(gòu)類型:由若干個類型組合而成,是可以再分解的,例如整型數(shù)組是由若干整型數(shù)據(jù)組成的。
算法算法是解決特定問題求解步驟的描述,在計算機中表現(xiàn)為指令的有限序列,并且每條指令表示一個或多個操作。
算法具有五個基本特征:輸入、輸出、有窮性、確定性和可行性。
輸出:算法至少有一個或多個輸出。
有窮性:指算法在執(zhí)行有限的步驟之后,自動結(jié)束而不會出現(xiàn)無限循環(huán),并且每一個步驟在可接受的時間內(nèi)完成。
確定性:算法的每一個步驟都具有確定的含義,不會出現(xiàn)二義性。
可行性:算法的每一步都必須是可行的,也就是說,每一步都能夠通過執(zhí)行有限次數(shù)完成。
正確性:算法的正確性是指算法至少應(yīng)該具有輸入、輸出和加工處理無歧義性、能正確反映問題的需求、能夠得到問題的正確答案。
高級語言編寫的程序在計算機上運行時所消耗的時間取決于下列因素:
1. 算法采用的策略,方案 2. 編譯產(chǎn)生的代碼質(zhì)量 3. 問題的輸入規(guī)模 4. 機器執(zhí)行指令的速度
我們可以想象,線性表有兩種物理存儲結(jié)構(gòu):順序存儲結(jié)構(gòu)和鏈式存儲結(jié)構(gòu)。
線性表的順序存儲結(jié)構(gòu),指的是用一段地址連續(xù)的存儲單元依次存儲線性表的數(shù)據(jù)元素。
線性表(a1,a2,…,an)的順序存儲如下:
線性表順序存儲的結(jié)構(gòu)#define MAXSIZE 20 typedef int ElemType; typedef struct { ElemType data[MAXSIZE]; int length; // 線性表當(dāng)前長度 } SqList;
總結(jié)下,順序存儲結(jié)構(gòu)封裝需要三個屬性:
存儲空間的起始位置,數(shù)組data,它的存儲位置就是線性表存儲空間的存儲位置。
線性表的最大存儲容量:數(shù)組的長度MaxSize。
線性表的當(dāng)前長度:length。
插入算法的思路如果插入位置不合理,拋出異常; 如果線性表長度大于等于數(shù)組長度,則拋出異?;騽討B(tài)增加數(shù)組容量; 從最后一個元素開始向前遍歷到第i個位置,分別將它們都向后移動一個位置; 將要插入元素填入位置i處; 線性表長+1。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/85286.html
摘要:通過通信線路連入通信子網(wǎng)終端是用戶訪問網(wǎng)絡(luò)的界面網(wǎng)絡(luò)操作系統(tǒng)是相對于主機操作系統(tǒng)而言的。接收方使用同一擴頻碼進行擴解。 目錄 一、計算機網(wǎng)絡(luò) 1.計算機網(wǎng)絡(luò)技術(shù)概述 2.計算機網(wǎng)絡(luò)分類 3.無線網(wǎng)絡(luò)分類 二、無線通信和網(wǎng)絡(luò)仿真技術(shù)基礎(chǔ) 1.基本概念 2.調(diào)制 (1)、概述 (2)、常用方式 ...
摘要:設(shè)計模式的類別設(shè)計模式一共分為種類型,共種。屬于結(jié)構(gòu)型的設(shè)計模式適配器模式橋接模式裝飾模式組合模式外觀模式享元模式代理模式。問題描述了應(yīng)該在何時使用設(shè)計模式。解決方案描述了設(shè)計的組成成分,它們之間的相互關(guān)系及各自的職責(zé)和協(xié)作方式。 設(shè)計模式概述 1. 設(shè)計模式是什么 我們在平時編寫代碼的過程中,會遇到各種各樣的問題,細想一下很多問題的解決思路大致一樣的,這時候你就可以把解決問題的思路整...
摘要:整個包,按照功能可以大致劃分如下鎖框架原子類框架同步器框架集合框架執(zhí)行器框架本系列將按上述順序分析,分析所基于的源碼為。后,根據(jù)一系列常見的多線程設(shè)計模式,設(shè)計了并發(fā)包,其中包下提供了一系列基礎(chǔ)的鎖工具,用以對等進行補充增強。 showImg(https://segmentfault.com/img/remote/1460000016012623); 本文首發(fā)于一世流云專欄:https...
閱讀 4154·2021-11-18 13:22
閱讀 1895·2021-11-17 09:33
閱讀 2937·2021-09-26 09:46
閱讀 1279·2021-08-21 14:11
閱讀 2954·2019-08-30 15:53
閱讀 2770·2019-08-30 15:52
閱讀 2114·2019-08-30 10:52
閱讀 1588·2019-08-29 15:30