開發工具與關鍵技術:
作者:Mr_愷
撰寫時間:2020.5.6
1.1:即使是在廣泛採用可視化程序設計的今天,藉助於集成開發環境可以很快地生成程序,但要想成爲一個專業的程序開發人員,至少需要以下三個條件:
(1)能夠熟練地選擇和設計各種業務邏輯的數據結構和算法
(2)至少能夠熟練地掌握一門程序設計語言
(3)熟知所涉及相關應用領域知識
1.2:數據結構:
一、邏輯結構
(1)線性結構:結構中的數據元素之間存在着一對一的線性關係。
(除第一個和最後一個數據元素外,每個數據元素只有一個前驅和一個後續數據元素。)
(2)樹結構:結構中的數據元素之間存在着一對多的層次關係。
(除根節點外,每個元素只有一個前驅數據元素,可有0個或若干個後續數據元素。)
(3)圖結構:結構中的元素之間存在着多對多的任意關係。
(每個數據元素可有0個或若干個前驅數據元素和0個或若干個後續數據元素。)
二、邏輯結構的延伸基本算法
三、物理結構
四、運算集合(基本操作)
1.3:算法
算法是解決問題的方法,是程序設計的精髓,程序設計的實質就是構造解決問題的算法。算法的設計取決於數據的邏輯結構,算法的實現取決於數據的物理存儲結構。
算法是對特定問題求解步驟的一種描述,它是指令的有限序列。
五個特性(有窮性、確定性、可行性、輸入、輸出)
(正確性、可讀性、健壯性、效率與地存儲量需求)
四、算法分析
(1)算法效率的質量
(1.算法本身選用的策略、2.書寫程序的語言、
3.編譯產生的代碼質量、4.機器執行指令的速度、5.問題的規模)
(2)算法的時間複雜度
(1.常量階時間複雜度、2.線性階時間複雜度、3.平方階時間複雜度)
(3)算法的空間複雜度
2.1:線性表
一、特徵:
1.在非空的線性表,有且僅有一個開始結點a1,它內有直接前趨,而僅有一個直接後繼a2.
2.有且僅有一個終端結點an,它沒有直接後繼,而僅有一個直接前趨an-1;
3.其餘的內部結點ai(2≦i≧n-1)都有且僅有一個直接前趨ai-1和一個直接後繼ai+1。
二、線性表的基本運算:
2.2:線性表有兩種存儲方式
2.3:順序表
順序表一般表現爲數組,使用一組地址連續的存儲單元依次存儲數據元素
(1)長度固定,必須在分配內存之前確定數組的長度。
(2)存儲空間連續,即允許元素的隨機訪問。
(3)存儲密度大,內存中存儲的全部是數據元素。
(4)要訪問特定元素,可以使用索引訪問,時間複雜度爲O(1).
(5)要想在順序表中插入或刪除一個元素,都涉及到之後所有元素的移動,因此時間複雜度爲O(n).
2.3:單鏈表的結構:
(1)長度不固定,可以任意增刪。
(2)存儲空間不連續,數據元素之間使用指針相連,每個數據元素只能訪問周圍的一個元素(根據單鏈表還是雙鏈表有所不同)。
(3)存儲密度小,因爲每個數據元素,都需要額外存儲一個指向下一元素的指針(雙鏈表則需要兩個指針)。
(4)要訪問特定元素,只能從鏈表頭開始,遍歷到該元素,時間複雜度爲O(n)
(5)在特定的數據元素之後插入或刪除元素,不涉及到其他元素的移動,因此時間複雜度爲O(1)
(6)雙鏈表還允許在特定的數據元素之前插入或刪除元素
3.1:棧
(一)棧的定義:
(二)棧的基本運算:
(三)棧的存儲結構:
3.2:隊列的定義:
初始化時:fornt=rear=0
循環隊列爲空的條件是:fornt=rear
4.1 串的定義
串是字符串的簡稱。在數據結構中,串是一種在數據元素的組成上具有一定約束條件的線性表,即要求組成線性表的所有數據元素都是字符,所以說串是一個有窮的字符序列。
4.1.1 定義
串是由零個或多個字符組成的有限序列,記作s=」s0s1…sn-1」(n≥0),其中s是串名,字符個數n稱作串的長度,雙撇號括起來的字符序列」s0s1…sn-1」是串的值。每個字符可以是字母、數字或任何其它的符號。零個字符的串(即:」」)稱爲空串,空串不包含任何字符。值得注意的是:
(1)長度爲1的空格串" "不等同於空串"";
(2)值爲單個字符的字符串不等同於單個字符,如"a"與′a′;
(3)串值不包含雙撇號,雙撇號是串的定界符。
串中任意個連續的字符組成的子序列稱爲該串的子串。包含子串的串則稱爲主串。通常將字符在串中的序號稱爲該字符在串中的位置。子串在主串鐘的位置則以該子串在主串中的第一個字符位置來表示。爲了讓大家更好的理解子串,舉個簡單的例子說明。如:
s="I am from Canada.";
s1="am.";
s2="am";
s3="I am";
s4="I am ";
s5="I am";
s2、s3、s4、s5都是s的子串,或者說s是s2、s3、s4、s5的主串,而s1不是s的子串。s3等於s5,s2不等於s4。s的長度是17,s3的長度是4,s4的長度是5。
4.1.2 串的基本算法
串的基本算法在串的應用中廣泛使用,這些基本算法不僅加深了對串的理解,更簡化了日後對串的應用。下面還是通過舉例介紹串的常用基本算法。
假設有以下串:s1="I am a student",s2="teacher",s3="student",常用的串的基本運算有下列幾種:
(1)Assign(s,t),將t的值賦給s。
(2)Assign(s4,s3)或Assign(s4,"student")後,s4="student"。
(3)Length(s),求s的長度。
(4)Length(s1)=14,Length(s3)=7。
(5)Equal(s,t),判斷s與t是否相等。
(6)Equal(s2,s3)=false,Equal("student",s3)=true。
(7)Concat(s,t),將t連接到s的末尾。如:Concat(s3, " number")= "student number"。
(8)Substr(s,i,len),求子串。如:Substr(s1,7,7)= 「student」,Substr(s1,10,0)= 「」, Substr(s1,0,14)= "I am a student"。
(9)Insert(s,i,t),在s的第i個位置之前插入串t。 Insert(s3,0,"good_")後,s3="good_student"。
(10)Delete(s,i,len),刪除子串。ss=「good_student」,Delete (ss,0,5)後,ss="student"。
(11)Replace(s,u,v),子串替換,即將s中的子串u替換爲串v。 Replace(s1,s3,s2)後,s1=「I am a teacher」,Replace(s1,「worker」,s2)後s1的值不變。 若ss=「abcbcbc」,則:Replace(ss,「cbc」,「x」)後,ss="abxbc",Replace(ss,"cb","z")後,ss="abzzc"。
(12)index(s,t),子串定位,即求子串t在主串s中的位置。 index(s1,s3)=7,index(s1,s2)=-1,index(s1, "I")=0。