-
只要 o(n) 掃瞄一次,數百萬個陣列並不大,而 c 可以為全域性變數開啟這麼大。
如果較大,則需要構造乙個雜湊函式,即雜湊。
這個問題根本不需要雜湊。
雜湊建構函式通常用於除以質數(這裡不會證明),並將具有相同結果的同一條鏈視為鍊表。 注意衝突處理:對於結果相同但數字不同的數字,通常的做法是鏈結到下乙個標頭節點。
這在資料結構書中已經討論過了,並且有很多方法可以做到這一點。
當然,如果你取乙個大於數字範圍的質數,它與陣列沒有什麼不同。
-
LZ 好,N
2 到 5462 的 n 次方希望對您有所幫助!
-
是否也應該考慮資料的分布?
如果數字不多,我認為使用二叉排序樹是個好主意。
-
將數字轉換為字串,num[max],max可以自己定義乙個足夠大的數字,如果最大數字為1000,max=6就可以了。
通過 num[i]- 檢查字元 num[i]-'0'把它轉換成乙個數字,得到乙個數字的每個數字的大小,其餘的我就不用說了。
如果有問題,可以互相重新**。 下面是我製作的乙個小程式,用來計算乙個數字的出現次數,其功能是從0到任意數字中找出乙個數字的個數。
用數字 nc, nc 求 0-num 的編號! =0
#include
#include
#include
#define nc 1
main()
int nl,i,t;
long result=0;
char num[64];
printf("enter your number:");
scanf("%s",num);
i=nl=strlen(num);
while (i--)
t=num[~-nl-i]-'0';
if(t>nc)
result+=pow(10,i)+t*pow(10,~-i)*(i);
else if(t==nc)
else if(tnc)
else if(atoi(&t)==nc)
printf("num is %s,length is %d,result is %d",num,nl,result);
只是雜湊使查詢速度更快,這是一項驗證功能。 期待有乙個主人。
-
它是線性表還是順序表?
函式原型:lnode*reverselist(lnode*l)。
說明:單向鍊表的反轉。
輸入 :lnode * l 單向鍊表的頭部指標返回 :head 指標。
lnode * reverselist(lnode **l)(*l)->next=null;
l=prv;
return *l;
你可以直接交換序列表,我不寫**。
-
翻譯真的很差,就是乙個一點英語都沒學過的人乙個字乙個字的翻譯。 和谷歌翻譯差不多,全書有100多個印刷錯誤,10多個錯誤(共幾十張圖片)。 我不想用這個詞,但其他詞很難表達我的感受,而且比TM垃圾局滾更垃圾!
沒有耐心和一定基礎的人,是不想理解中文版說的。 我真的不知道清華出版社是做什麼的。 原著必須是好的和實質性的。
有條理。 如果你能耐心地閱讀中文版,或者直接閱讀英文原版,你一定會受益匪淺!
-
赤水餘陽的說法有問題,學好資料結構是什麼意思? 您可以利用您的資料結構知識來實現 STL 庫、提公升庫並解決實際程式設計問題。
要很好地學習資料結構,您需要學習至少一門計算機語言。
所以如果你的計算機語言是C++,那麼如果你學不好C++,你肯定學不好資料結構(鐵定)。
為什麼? 計算機開發領域有幾門核心課程:資料結構、作業系統原理、資料庫系統原理和組合語言程式設計。
資料結構是這些其他核心課程的基礎。
資料結構最終是為了實現,如果你不學習和試驗C++**,那麼學習就像乙個快速修復,你無法理解細節。
到時候,對資料結構的程式設計要求會很多,如果乙個人學不好指標,他就無法對單向鍊表、雙向鍊表、二叉樹、圖進行程式設計。
然而,即使你之前沒有在C++上投入太多時間,你也可以通過休息半個月到乙個月來專心致志地學習來彌補它,甚至比你的大多數班級都更好:不斷的程式設計練習。
-
書上寫起來很簡單,但在實踐中卻很難用到,這是最基礎的東西,是以後學習電腦科學的基礎,就像第一年學習高等數學一樣,是一門基礎課程,至於學習的程度,就要看你自己對自己的要求了!
a) 基本概念和術語。
1.資料結構的概念。
2.抽象資料結構型別的表示和實現。
3.演算法、演算法設計要求、演算法效率的衡量、儲存空間要求。
b) 線表。
1.折線表的型別定義。
2.線表的順序表示和實現。
3.線性表的鏈式表示和實現。
c) 堆疊和佇列。
1.堆疊的定義、表示和實現。
2.堆疊應用:數系轉換、括號匹配、行、迷宮求解、表示式求值 3堆疊與遞迴實現。
4.佇列。 d) 字串。
1.字串的定義、表示和實現。
2.字串的模式匹配演算法。
5)樹和二叉樹。
1.樹的定義和基本術語。
2.二叉樹,遍歷二叉樹和線索二叉樹。
3.樹木和森林:儲存結構、二叉樹轉換、遍歷 4霍夫曼樹和霍夫曼編碼。
5.回顧方法和樹遍歷。
6)搜尋。1.靜態查詢表。
2.動態查詢表。
3.雜湊表。
vii) 圖。1.圖表的定義和術語。
2.圖形的儲存結構。
3.圖形的遍歷。
4.圖形的連線問題。
5.拓撲排序和關鍵路徑。
6.最短路徑。
viii) 內部分類。
1.排序的概念。
2.插入排序。
3.快速排序。
4.選擇排序:簡單選擇、樹選擇、堆排序。
5.合併排序。
6.基數排序。
7.各種分揀方法的比較。
-
這學期我剛剛學習完資料結構,我正在使用 C++。 對於資料結構和演算法課程,C++程式設計是基礎,我們這學期的課上有很大的作業,如果你不熟悉語言,會很不方便。 不過你不用擔心,學習程式設計最重要的是學習一種計算思維方法,如果你就是不會用語法,那麼在需要用的時候就查書本吧。
-
C++比較差,資料結構應該可以學習,但是現在的資料結構教科書大多是用C或C++語言描述的,所以有一些關係,但影響不大,只要能理解一般的語句就行。
-
兩者之間沒有直接聯絡,但學習對你有好處,不學習也可以學習資料結構和演算法,我建議你學習C++,但不要太把他當回事,只要你能通過,不要不及格......
-
選擇“排序”。
插入排序:每次比較後最多刪除乙個反向排序,因此與氣泡排序一樣高效。 但是在速度上還是要高一些,因為在氣泡排序是值交換,在插入排序是值轉移,所以直接插入排序會比氣泡排序更好。
直接插入方法也是一種對資料有序性非常敏感的演算法。 在訂單情況下,只需要 n-1 次比較,在最壞的情況下,需要 n(n-1) 2 次比較。
選擇排序:簡單的選擇排序,有一定的比較次數:n(n-1) 2. 因此,它在序列的任何情況下都不會表現良好(從上 100k 到正序數和反序數。
可以發現,它花費的時間大致相同,只是資料移動時間),這表明它對資料的有序性並不敏感。雖然它有很多比較,但它的資料交換很少。 所以我們會在一般情況下找到它。
將比氣泡排序更快。
氣泡排序:在最佳情況下,只有在 n-1 次比較後才能獲得結果(在這種最佳情況下,序列已經按正常順序排列,這正是從 100k 的正階中可以看出的),但在最壞的情況下,即以相反的順序(或末尾的較小值),下沉演算法將需要 n(n-1) 2 次比較。 所以一般來說,尤其是相反的順序,這並不理想。
它是一種對資料的有序性非常敏感的排序演算法。
堆排序:因為它是在使用比較結果的直接選擇排序的基礎上形成的。 效率提高了很多。
它完成排序的比較總數為 o(nlog2n)。 它是一種對資料的有序性不敏感的演算法。 但是堆排序需要兩個步驟:
是堆砌,二是整理(調整堆)。 因此,它通常不適用於小規模序列,但對於較大的序列,它會顯示出優越的效能。
基數排序:在程式中,它是以數值的十進位位分解的,然後一次性分配空間,所以需要更多的輔助空間(10*n+10),但是我們可以做其他的分解,比如按乙個位元組分解,如果空間是鏈結的,空間只需要輔助空間n+256。 基數排序的時間是線性的(即 o(n))。
可以看出,基數排序很吸引人,但不是就地排序,當節點資料量較大時改為索引排序是合適的。 但是,基數排序有乙個前提,即關鍵字可以像整數和字串一樣分解,但如果它們是浮點數,則不能分解。
-
選擇“排序”。
選擇排序演算法的原理是:第一次行程從n個要排序的關鍵詞中找到最小的關鍵詞,放在第乙個位置,如果要找到最小的關鍵詞,所有元素都必須比較,所以第一次行程要比較n-1次; 第二次旅行是找出最小的元素.........通過 n-2 比較從剩餘的 n-1 元素以此類推,無論是否有初始階數,都會進行 n-1 次比較,總共 n(n-1) 2 次,時間複雜度始終為 o(n 平方)。
對於其餘的,讓我們以插入排序為例:插入排序的基本思想是一次將一條記錄插入到先前按關鍵字大小排序的子序列中。 想象一下,如果有序子序列是 123,要排序的記錄是 45,插入 4 時,你只需要和 3 比對一次就知道它排在 3 之後,排序 5 時,你只需要和 4 比對一次就知道它排在 4 之後, 並總共比較 2 次。
如果有序子序列為234,待排序的記錄為15,則插入1時,需要從後到前比對3次才能找到其位置,排序5時只需與4比對一次,一共比對44次。 從上面的例子可以看出,比較的數量取決於初始資料集的順序。
順便說一句,基數排序不是基於關鍵字比較的排序演算法。
-
來這裡看看是不是都是SDU。 為什麼我認為選擇排序可以在最佳情況下及時終止,並且可以終止 n-1???
-
資料結構 + 演算法 = 程式。
-
這都是非常基本的概念性的東西,第一次線性重新雜湊,然後雜湊函式計算出的位置已經有了乙個元素,只要找到乙個空的位置向後放,所以結果是:
位址 0 1 2 3 4 5 6 7 8 9 元素 16 48 9 82 1 5 7 39 第二個插入排序僅此而已,你自己看看這個,每次都是前幾個元素的正確順序,例如。
頭等艙:89
第二個:12,89
第三次:12、34、89
一次,到最後乙個,是排列陣列的有序陣列。
霍夫曼樹是:
樹的加權路徑長度是樹中所有葉節點的加權路徑長度之和,節點的加權路徑長度是從節點到根節點的路徑長度與節點上的權重的乘積。 >>>More
演算法相似,但語言描述不同,C是基礎! 但是,C++語言相對簡單,所以習慣哪一種就好了!! 資料結構多用在C++中,這取決於你用的是哪個版本的教科書,如果你學的是C++,那麼用的是C++版本的教科書,問題不是很大!! >>>More
另一種看法:select ,select zy ,sum(zy as yjjefrom zy tbkk,zy brry >>>More