1.1,集合結構是壹個集合,即壹個圓裏有很多元素,元素之間沒有關系。這個很簡單。
1.2,線性結構說白了就是很多人站在壹條線上。這條線不壹定是直的。它也可以是彎曲的。也可以相當於壹條線被分成幾段(發揮妳的想象力)。線性結構是壹對壹的關系。
1.3,樹形結構說白了,開發者肯定多多少少知道xml解析樹形結構和他很像。妳也可以把它想象成壹個金字塔。樹形結構是壹對多的關系。
1.4,圖形結構比較復雜。他怎麽樣?無限。無邊無向(directionless)圖形機制可以理解為多對多類似於我們之間的交集關系。
數據結構的存儲
數據結構常用的存儲結構有兩種:順序存儲結構和鏈式存儲結構。
2.1順序存儲結構
發揮妳的想象力。舉個例子。數組。1-2-3-4-5-6-7-8-9-10。這是壹個順序存儲結構,存儲就是壹個按順序的例子。棧,開發者都很熟悉。棧是先入後出的形式吧?
妳可以理解為hello world從棧底到棧頂的邏輯是h-e-l-l-o-w-o-r-l-d,是順序存儲。再比如隊列,是FIFO吧?從頭到尾,H-E-L-L-O-O-R-L-D就是這樣。
2.2鏈式存儲結構
再次發揮妳的想象力。這張圖稍微復雜壹點。我總是完成它。我壹會兒去問問美工,然後再貼。比如還是1-2-3-4-5-6-7-8-9-10的數組,不壹樣。1(地址)-2(地址)-7(地址每個數字後面都有壹個地址,存儲形式不再是順序的,也就是說順序是亂序的。1後面的地址(address) 1指向2,2之後的地址指向3。妳應該知道3點後的地址是給誰的。執行的時候是1(地址)-2(地址)-3(地址)-4(地址)-5(地址)-6(地址)-7(地址)-8(地址)-10(地址),但是存儲的時候。明白了嗎?
單向鏈表\雙向鏈表\循環鏈表
或者舉個例子。理解是最重要的。什麽都不要背。定義。邏輯。理解是最重要的。
3.1單向鏈表
a-& gt;b-& gt;c->;d-& gt;e-& gt;f-& gt;g-& gt;h .這是單向鏈表。h是頭,A是尾。就像只有壹個頭的火車,只能壹個頭跑。
3.2雙向鏈表
數組和鏈表的區別:
數組:數組元素在內存中是連續存儲的,可以用下標搜索元素;插入和刪除需要移動大量的元素,比較適合元素很少變化的情況。
鏈表:鏈表中的元素在內存中不是順序存儲的,所以查找比較慢,插入和刪除只需要重新分配元素指針,效率高。
3.3循環鏈表
循環鏈表和單向鏈表壹樣是鏈式存儲結構,但不同的是循環鏈表的最後壹個節點的指針指向循環鏈表的第壹個節點或頭節點,從而形成循環鏈。發揮妳的想象力。b-& gt;c->;d-& gt;e-& gt;f-& gt;g-& gt;h-& gt;a .圍成壹個圈。就像蛇吃自己的壹樣,這就是循環,不需要背什麽理論知識。
二叉樹/平衡二叉樹
4.1什麽是二叉樹
在樹形結構下,兩個節點都叫二叉樹,沒有大於2的節點,分為左子樹和右子樹。順序不能顛倒。妳壹定想這個東西是什麽,左子樹和右子樹是什麽,到底是個什麽鬼?現在我用普通話再說壹遍。妳把壹棵二叉樹當做壹個人。人的頭是樹根,左邊的子樹是左手,右邊的子樹是右手。不能有左右手(殘疾,聲明壹下,絕不是歧視殘疾朋友,別怪,別怪比如,我很抱歉)。左右手可以有壹個,但不能顛倒。這應該是清楚的,對不對
二叉樹有五種形式。
1.壹棵空的樹(沒有節點)可以理解它為什麽不像空氣。
2.只有根節點。明白壹個人只有壹個腦袋,其他什麽都沒有,有點嚇人。
3.只有左子樹(壹個頭壹個左手感覺越來越寫不下去)
4.只有右邊的子樹
5.既有左子樹也有右子樹
二叉樹可以轉換成森林樹或者二叉樹。這裏就不介紹了。您肯定不需要為您的項目介紹數據結構。先理解,不要死記硬背,死記硬背沒用。
1,兩種方式交換A和B的值,不需要中間變量。
2.* * *求最大公約數
3.模擬堆棧操作
棧是壹種數據結構,它的特點是:先進後出-
練習:使用全局變量模擬堆棧的操作
# include & ltstdio.h & gt
# include & ltstdbool.h & gt
# include & ltassert.h & gt
//保護全局變量:在全局變量之前添加static之後,這個全局變量只能使用這個文件中的static int data[1024];//堆棧最多可以存儲1024個數據。
靜態int count = 0;//目前為止放了多少個數(相當於棧頂位置)
4.分類算法
選擇排序、冒泡排序和插入排序可以總結如下:
將數組分為排序部分和未排序部分。
1.選擇排序以在左端定義排序部分,然後選擇未排序部分的最小元素與未排序部分的第壹個元素交換。
2.冒泡排序在右端定義已排序部分,在遍歷未排序部分的過程中進行交換,將最大的元素交換到最右端。
3.插入排序在左端定義已排序部分,將未排序部分的第壹個元素插入已排序部分的適當位置。
4.1,選擇排序
選擇排序:最大值出現在開頭。
Pass 1:求n個數中最小(最大)數與第壹個數的交換位置。
第二關:在剩下的n-1個數中,找出最小(最大)數和第二個數的交換位置。
重復此操作...與第三和第四個交換位置...依次編號。
在n-1通道上,數據最終可以按升序(降序)排列。
4.2、冒泡排序
冒泡排序:相鄰元素成對比較,壹次比較後,最大值出現在最後。
Pass 1:依次比較兩個相鄰的數,不斷交換(小數放前,大數放後)逐壹前進,最大值最終出現在第n個元素位置。
第二關:依次比較兩個相鄰的數,不斷交換(小數之前,大數之後)逐壹遞進,最大值最終出現在第n-1個元素的位置。
…… ……
Pass n-1:依次比較兩個相鄰的數,不斷交換(小數放前,大數放後)逐壹前進,最大值最終出現在第二個元素位置。
5、半搜索(二分搜索法)
雙重搜索:優化搜索時間的原則(不遍歷所有數據);
1.數組必須有序
2.最小值和最大值(已知範圍)必須已知。
//給定壹個有序數組和壹個鍵,需要從數組中找到該鍵對應的索引位置。
字符串倒置
給定字符串“hello,world”,實現其反轉。輸出結果:dlrow,olleh
序數組合並集
將有序數組{1,4,6,7,9}和{2,3,5,6,8,9,10,11,12}合並為{1。
散列算法
哈希表
示例:給定值為字母A,對應的ASCII碼值為97,數組下標為97。
這裏的ASCII碼,即使是hash函數,也是通過這個函數進行存儲和搜索,有效的提高了搜索效率。
查找在字符串中只出現壹次的第壹個字符。如果輸入“abaccdeff”,輸出的‘b’字符(char)是長度為8的數據類型,所以total * * *,有256種可能。根據其ASCII碼值,每個字母是壹個與數組下標相對應的數字。數組中存儲的是每個字符出現的次數。
找到兩個子視圖的* * *父視圖。
思路:記錄兩個子視圖的所有父視圖並保存在數組中,然後逆序搜索,直到找到第壹個不同的父視圖。
在無序數組中尋找中間值
中位數:數組個數n為奇數時,為(n+1)/2,為中間數;當n為偶數時,為(n/2+(n/2+1))/2,是中間兩個數的平均值。
首先要了解壹些排序算法:iOS排序算法。
想法:
1.排序算法+中值
首先用冒泡排序、快速排序、堆排序、hill排序等排序算法對給定數組進行排序,然後取出中間數。
2.使用快速行的概念
1.簡述SSL加密過程中使用了哪些加密方法,為什麽?
SSL加密的過程之前已經描述過了,這裏不再贅述。
SSL加密實際上在過程中使用了對稱加密和非對稱加密的結合。
主要考慮的是先用非對稱加密連接,以避免中間人攻擊密鑰被劫持,但非對稱加密的效率比較低。因此,壹旦建立了安全連接,就可以使用輕量級對稱加密。
2.RSA非對稱加密
對稱加密【算法】加密和解密時使用相同的密鑰;而【非對稱加密算法】需要兩個【密鑰】來加密和解密。這兩個密鑰是【公鑰】(簡稱公鑰)和私鑰(簡稱私鑰)。
RSA加密
與對稱加密[算法]不同,[非對稱加密算法]需要兩個[密鑰]:[公鑰]和私鑰。公鑰和私鑰是壹對。如果數據是用公鑰加密的,則只能用相應的私鑰解密。如果數據是用私鑰加密的,則只能用相應的公鑰解密。因為加密和解密使用兩個不同的密鑰,所以這種算法稱為非對稱加密算法。
RSA**** *加密原理
RSA是壹種常見的加密方式,可以用下面的例子簡單討論壹下它的加密原理。
隨機取兩個質數
以上是本文整理的內容,感謝觀看!