張小五學演算法與資料結構第二天 資料結構和線性表概述

2021-08-15 02:22:03 字數 2069 閱讀 6194

今天是第二天,依舊是元氣滿滿的一天。從今天開始我就將資料結構和演算法放在一起結合學習,畢竟他倆不分家嘛。那資料結構中的資料是由資料元素組成,資料元素是資料的基本單位。一般來說,資料元素有若干基本項(或稱字段、域、屬性)組成。

資料型別則是對資料原色取值範圍運算的限定,限定的操作為:[+,-,*,/,%]。使用者在程式設計時也可以自定義資料型別。

說到資料元素,那麼它並不是孤立存在的,而是存在著某種關係(或者聯絡、結構)。比如線性關係(linear結構),層次關係(tree結構)和網狀關係(graph結構)。

綜上所述,資料結構就是一門研究非數值型程式設計中計算機操作的物件(資料)及其相互間關係和運算的學科。

一、資料的邏輯結構和儲存結構

資料結構中的邏輯結構有集合、線性結構、樹形結構和圖狀結構四種。而資料的儲存結構則分為順序儲存(將資料結構中的各元素按照其邏輯順序存放於儲存器一片連續的儲存空間中),但是這種情況很少見,因為很難找到剛好合適的記憶體大小可以存放剛好合適的資料;鏈式儲存(將資料結構中各元素分不到儲存器的不同點,用位址或指標方式建立他們之間的聯絡),這種情況是十分多見的,通過指標尋找資料元素;索引儲存(在儲存資料的同時建立乙個附加的索引表),即索引儲存結構=資料檔案+索引表,我們可以通過索引表來進行資料的查詢,速度也是十分的優良;雜湊儲存(又稱hash,他是一種力圖將資料元素的儲存位置與關鍵碼之間建立確定對應關係的查詢技術),雜湊法儲存的基本思想是:由節點的關鍵碼決定節點的儲存位址,雜湊技術除了可以用於查詢之外,還可以用於儲存,理想的雜湊訪問是非常迅速的。

二、演算法的分析

昨天學到了關於什麼是演算法,今天就對演算法進行分析,之前說演算法就是解決問題的方法,那麼解決乙個問題可以有多種不同的演算法,在演算法正確的前提下,評價演算法好壞的方法大致有五點:1.消耗時間的多少 2.消耗儲存空間的多少 3.容易理解、容易程式設計和除錯、容易維護 4.問題的規模 5.演算法的時間複雜度:演算法消耗的時間,用問題規模的函式t(n)來表示。

其中時間複雜度是衡量演算法好壞的乙個重要標準之一,想要計算演算法的時間複雜度,就要知道以下的定義。

1.語句的頻度:語句頻度定義為可執行語句在演算法中重複執行的次數。若某語句執行時間為t,執行次數為f,則該語句所耗時間為t*f。

例如:void matrixm(a,b,c){

float a[n][n],b[n][n],c[n][n];{

int i,j k;

for(i=0;i

上面的**中第乙個

for迴圈的語句頻度為

n+1,

第二個for

迴圈的語句頻度為

n(n+1)

,c[i][j]

的語句頻度為

n*n,第三個

for迴圈中和語句頻度為

n*n*(n+1)

,最後一句的語句頻度為

n*n*n。

演算法的時間複雜度定義為演算法中可執行的語句頻度之和,記為t(n),所以例子之中的時間複雜度為

t(n)=(n+1)+n(n+1)+n*n+n*n(n+1)+n*n*n=2n*n*n+3n*n+2n+1

當n趨近於正無窮時lim(t(n)/n*n*n)=2,所以t(n)與n*n*n為同階無窮大,記為t(n)=o(n*n*n)。

三、線性表的概述

線性表是資訊表的一種形式,表中資料元素之間滿足線性邏輯關係(或線性結構),是一種最基本。最簡單的資料結構型別。

設線性表l=(a0,a1...........an-1),對l線性表的基本運算有:

1.建立乙個空表:creatlist(l);

2.置空表:clearlist(l);

3.判斷表是否為空:emptylist(l):若表為空,返回值為true,否則返回false;

4.求表長:lengthlist(l);

5.取表中某個元素:getlist(l,i):即ai;

6.定位運算:locatelist(l,x):確定元素x在表l中的位置(或序號)當表中有該元素且第乙個與其相等時返回i,如果沒有相等元素則返回-1;

7.插入:insertlist(l,x,i):將元素x插入到表l中第i個元素之前,且表長+1;

8.刪除:deletelist(l,i):刪除表l中第i個元素,且表長-1;

這是基本運算,對l的運算還有合併、拆分、複製、排序、遍歷等。

資料結構第二天

學習資料結構第二天,有點學習心得,所以記錄一下。目前才接觸線性結構的順序表和單鏈表的 說說它們的異同吧。毫無疑問,順序表和單鏈表的共同點就是線性,即元素呈線性排列,單一前繼和單一後繼。並且表示形式都使用打頭的元素位址,有點順藤摸瓜的感覺。不同點就是順序表的物理結構也是順序的,實際上就是位址 而已,好...

第二天學習資料結構

include include include 完成一部分,只有初始化和輸出,其餘明天繼續 typedef struct list sqlist 動態鍊錶的生成 用單迴圈鍊錶 void initlist sqlist list 初始化鍊錶 void showlist sqlist list void...

資料結構與演算法學習系列第二天

乙個問題的解決辦法有很多種,所以小編寫的演算法可能您沒有見過或者還有很多欠缺的地方,因為我沒看過別人寫的演算法。現在憑藉自己的理解 基礎上實現的問題解法。不妥之處多多指教。問題1 線性表之字串的刪除操作,如字串a abcdef 刪除第二個元素b,得到新的字串acdef 思路 得到要刪除的位置,建立乙...