1. 程式人生 > 實用技巧 >第二章:陣列結構

第二章:陣列結構

2.1 線性表簡介

1 線性表:

  1)有序表可以是空集合,或者寫成(a1,a2,a3,......,an,an

  2)存在唯一的第一個元素a1和唯一最後一個元素an。

  3)除了第一個元素a1外,每一個元素都有唯一的先行者。

  4)除了最後一個元素an外,每一個元素都有唯一的後繼者。

2 線性表儲存結構:

  靜態資料結構:也稱為“密集表”,它使用連續分配的記憶體空間來儲存有序表中的資料。(靜態資料結構是在編譯時就給相關的變數分配好記憶體空間。在建立靜態資料結構的初期,必須宣告最大可能要佔用的固定記憶體空間,因此容易造成記憶體浪費。優點:設計簡單,讀取與修改表中任意元素的時間是固定的。缺點:刪除或加入資料時,需要移動大量資料)

  動態資料結構:也稱為“連結串列”,它使用不連續的記憶體空間儲存具有線性表特性的資料。(優點:資料的插入或刪除都相當方便,不需要移動大量資料。記憶體是在程式執行時才進行分配,所以不需要事先宣告,節省記憶體。缺點:設計資料結構麻煩,查詢資料時,無法像靜態資料一般可以隨機讀取,必須直到按順序找到改資料為止)

2.2 認識陣列

1 陣列型別的宣告:

  1)起始地址:表示陣列名(或陣列第一個元素)所在記憶體中的起始地址。

  2)維度:一維、二維、三維。

  3)索引上下限:

  4)陣列元素個數:是索引上限和索引下限的差加1。

  5)陣列型別:宣告此陣列的型別,它決定陣列元素在記憶體所佔容量的大小。

  程式1是記錄5個人分數,然後求平均值。

1 # 記錄5個人分數,然後求平均
2 #一維列表使用
3 Score = [87,66,90,65,70]
4 Total_Score = 0
5 for count in range(5):
6     print('第 %d 位學生的分數:%d' %(count+1,Score[count]))
7     Total_Score += Score[count]
8 print('--------------------------')
9 print('5位學生的總分:%d' %Total_Score)
View Code

  程式2表示的是輸入一個二維列表表示的二階行列式,並計算結果。

 1 N = 2
 2 # 宣告二維陣列
 3 arr = [ [None]*N for row in range(N) ]
 4 print('|a1  b1|')
 5 print('|a2  a2|')
 6 arr[0][0] = input('請輸入a1:')
 7 arr[0][1] = input('請輸入b1:')
 8 arr[1][0] = input('請輸入a2:')
 9 arr[1][1] = input('請輸入b2:')
10 #求第二階行列式的值
11 result = int(arr[0][0]) * int(arr[1][1]) - int(arr[0][1])*int(arr[1][0])
12 print('|%d  %d|'    %(int(arr[0][0]),int(arr[0][1])))
13 print('|%d  %d|'    %(int(arr[1][0]),int(arr[1][1])))
14 print('行列式值=%d' %result)
View Code

  程式3表示的找出2 X 3 X 3 三維陣列中儲存數值的最小值。

 1 # 三維陣列
 2 num = [ [ [33,45,67],[23,71,66],[55,38,66] ],\
 3        [ [21,9,15],[38,69,18],[90,101,89] ] ]
 4 value = num[0][0][0]
 5 print(num)
 6 for i in range(2):
 7     for j in range(3):
 8         for k in range(3):
 9             if(value>=num[i][j][k]):
10                 value = num[i][j][k]
11 print("最小值= %d" %value)
View Code

2.3 矩陣

2.4 陣列與多項式