c語言數據結構系統化,C語言數據結構+數據庫+操作系統

http://cv.qiaobutang.com/post/55c419b20cf2009bd4607795

第二部分是專業相關的C ,數據庫,操作系統,數據結構。

http://c.biancheng.net/cpp/u/shuju/

數據(Data)是信息的載體,它能夠被計算機識別、存儲和加工處理。它是計算機程序加工的原料,應用程序處理各種各樣的數據。計算機科學中,所謂數據就是計算機加工處理的對象,它可以是數值數據,也可以是非數值數據。數值數據是一些整數、實數或復數,主要用于工程計算、科學計算和商務處理等;非數值數據包括字符、文字、圖形、圖像、語音等。

數據結構(Data Structure)是指互相之間存在著一種或多種關系的數據元素的集合。在任何問題中,數據元素之間都不會是孤立的,在它們之間都存在著這樣或那樣的關系,這種數據元素之間的關系稱為結構。根據數據元素間關系的不同特性,通常有下列四類基本的結構:

集合結構。在集合結構中,數據元素間的關系是“屬于同一個集合”。集合是元素 關系極為松散的一種結構。

線性結構。該結構的數據元素之間存在著一對一的關系。

樹型結構。該結構的數據元素之間存在著一對多的關系。

圖形結構。該結構的數據元素之間存在著多對多的關系,圖形結構也稱作網狀結構。

數據的存儲結構可采用順序存儲或鏈式存儲的方法。

順序存儲方法是把邏輯上相鄰的元素存儲在物理位置相鄰的存儲單元中,由此得到的存儲表示稱為順序存儲結構。順序存儲結構是一種最基本的存儲表示方法,通常借助于程序設計語言中的數組來實現。

鏈式存儲方法對邏輯上相鄰的元素不要求其物理位置相鄰,元素間的邏輯關系通過附設的指針字段來表示,由此得到的存儲表示稱為鏈式存儲結構,鏈式存儲結構通常借助于程序設計語言中的指針類型來實現。

除了通常采用的順序存儲方法和鏈式存儲方法外,有時為了查找的方便還采用索引存儲方法和散列存儲方法。

數據類型

在高級程序設計語言中,數據類型可分為兩類:一類是原子類型,另一類則是結構類型。原子類型的值是不可分解的。如C 語言中整型、字符型、浮點型、雙精度型等基本類型,分別用保留字int、char、float、double 標識。而結構類型的值是由若干成分按某種結構組成的,因此是可分解的,并且它的成分可以是非結構的,也可以是結構的。例如,數組的值由若干分量組,每個分量可以是整數,也可以是數組等。在某種意義上,數據結構可以看成是“一組具有相同結構的值”,而數據類型則可被看成是由一種數據結構和定義在其上的一組操作所組成的。

⒈時間復雜度

一個程序的時間復雜度(Time complexity)是指程序運行從開始到結束所需要的時間。

一個算法是由控制結構和原操作構成的,其執行時間取決于兩者的綜合效果。為了便于比較同一問題的不同的算法,通常的做法是:從算法中選取一種對于所研究的問題來說基本運算的原操作,以該原操作重復執行的次數作為算法的時間度量。一般情況下,算法中原操作重復執行的次數是規模n 的某個函數T(n)。許多時候要精確地計算T(n)是困難的,我們引入漸進時間復雜度在數量上估計一個算法的執行時間,也能夠達到分析算法的目的。

定義(大Ο記號):如果存在兩個正常數c 和n0,使得對所有的n,n≥n0,有:

f(n) ≤ cg(n)

則有:

f(n) = Ο(g(n))

例如,一個程序的實際執行時間為T(n)=2.7n3+3.8n2+5.3。則T(n)=Ο(n3)。使用大Ο記號表示的算法的時間復雜度,稱為算法的漸進時間復雜度(Asymptotic?Complexity)。

通常用Ο(1)表示常數計算時間。常見的漸進時間復雜度有:

Ο(1)<Ο(log2n)<Ο(n)<Ο(nlog2n)<Ο(n2)<Ο(n3)<Ο(2n)

⒉空間復雜度

一個程序的空間復雜度(Space complexity)是指程序運行從開始到結束所需的存儲量。

程序的一次運行是針對所求解的問題的某一特定實例而言的。例如,求解排序問題的排序算法的每次執行是對一組特定個數的元素進行排序。對該組元素的排序是排序問題的一個實例。元素個數可視為該實例的特征。程序運行所需的存儲空間包括以下兩部分:

⑴固定部分。這部分空間與所處理數據的大小和個數無關,或者稱與問題的實例的特征無關。主要包括程序代碼、常量、簡單變量、定長成分的結構變量所占的空間。

⑵可變部分。這部分空間大小與算法在某次執行中處理的特定數據的大小和規模有關。例如100 個數據元素的排序算法與1000 個數據元素的排序算法所需的存儲空間顯然是不同的。

線性表的定義

線性表是一種線性結構。線性結構的特點是數據元素之間是一種線性關系,數據元素“一個接一個的排列”。在一個線性表中數據元素的類型是相同的,或者說線性表是由同一類型的數據元素構成的線性結構。在實際問題中線性表的例子是很多的,如學生情況信息表是一個線性表:表中數據元素的類型為學生類型; 一個字符串也是一個線性表:表中數據元素的類型為字符型,等等。

綜上所述,線性表定義如下:線性表是具有相同數據類型的n(n>=0)個數據元素的有限序列,通常記為:

(a1,a2,… ai-1,ai,ai+1,…an)

其中n為表長, n=0 時稱為空表。

表中相鄰元素之間存在著順序關系。將ai-1 稱為ai 的直接前趨,ai+1 稱為ai 的直接后繼。就是說:對于ai,當i=2,...,n 時,有且僅有一個直接前趨ai-1.,當i=1,2,...,n-1 時,有且僅有一個直接后繼ai+1,而a1 是表中第一個元素,它沒有前趨,an 是最后一個元素無后繼。

線性表的基本操作

在第一章中提到,數據結構的運算是定義在邏輯結構層次上的,而運算的具體實現是建立在存儲結構上的,因此下面定義的線性表的基本運算作為邏輯結構的一部分,每一個操作的具體實現只有在確定了線性表的存儲結構之后才能完成。

線性表上的基本操作有:

⑴ 線性表初始化:Init_List(L)

初始條件:表L不存在操作結果:構造一個空的線性表

⑵ 求線性表的長度:Length_List(L)

初始條件:表L存在

操作結果:返回線性表中的所含元素的個數

⑶ 取表元:Get_List(L,i)

初始條件:表L存在且1<=i<=Length_List(L)

操作結果:返回線性表L中的第i個元素的值或地址

⑷ 按值查找:Locate_List(L,x),x是給定的一個數據元素。

初始條件:線性表L存在

操作結果:在表L中查找值為x的數據元素,其結果返回在L中首次出現的值為x的那個元素的序號或地址,稱為查找成功; 否則,在L中未找到值為x的數據元素,返回一特殊值表示查找失敗。

⑸ 插入操作:Insert_List(L,i,x)

初始條件:線性表L存在,插入位置正確(1<=i<=n+1,n為插入前的表長)。

操作結果:在線性表L的第i 個位置上插入一個值為x 的新元素,這樣使原序號為i , i+1, ... , n 的數據元素的序號變為i+1,i+2, ... , n+1,插入后表長=原表長+1。

⑹ 刪除操作:Delete_List(L,i)

初始條件:線性表L存在,1<=i<=n。

操作結果:在線性表L中刪除序號為i的數據元素,刪除后使序號為i+1, i+2,..., n的元素變為序號為i, i+1,...,n-1,新表長=原表長-1。

線性表的順序存儲是指在內存中用地址連續的一塊存儲空間順序存放線性表的各元素,用這種存儲形式存儲的線性表稱其為順序表。因為內存中的地址空間是線性的,因此,用物理上的相鄰實現數據元素之間的邏輯相鄰關系是既簡單,又自然的。如圖2.1 所示。

設a1的存儲地址為Loc(a1),每個數據元素占d個存儲地址,則第i個數據元素的地址為:

Loc(ai)=Loc(a1)+(i-1)*d 1<=i<=n

0818b9ca8b590ca3270a3433284dd417.png

單鏈表

鏈表是通過一組任意的存儲單元來存儲線性表中的數據元素的,那么怎樣表示出數據元素之間的線性關系呢?為建立起數據元素之間的線性關系,對每個數據元素ai,除了存放數據元素的自身的信息ai 之外,還需要和ai一起存放其后繼ai+1 所在的存貯單元的地址,這兩部分信息組成一個“結點”,結點的結構如圖2.6 所示,每個元素都如此。存放數據元素信息的稱為數據域,存放其后繼地址的稱為指針域。因此n個元素的線性表通過每個結點的指針域拉成了一個“鏈子”,稱之為鏈表。因為每個結點中只有一個指向后繼的指針,所以稱其為單鏈表。

鏈表是由一個個結點構成的,結點定義如下:

typedef struct node

{ datatype data;

struct node *next;

} LNode,*LinkList;

定義頭指針變量:

LinkList H;

0818b9ca8b590ca3270a3433284dd417.png

在鏈表的頭部插入結點建立單鏈表

鏈表與順序表不同,它是一種動態管理的存儲結構,鏈表中的每個結點占用的存儲空間不是預先分配,而是運行時系統根據需求而生成的,因此建立單鏈表從空表開始,每讀入一個數據元素則申請一個結點,然后插在鏈表的頭部,如圖2.10 展現了線性表:(25,45,18,76,29)之鏈表的建立過程,因為是在鏈表的頭部插入,讀入數據的順序和線性表中的邏輯順序是相反的。

0818b9ca8b590ca3270a3433284dd417.png

在單循環鏈表上的操作基本上與非循環鏈表相同,只是將原來判斷指針是否為NULL變為是否是頭指針而已,沒有其它較大的變化。

0818b9ca8b590ca3270a3433284dd417.png

下面先請看圖2.22 ,在圖2.22中,規模較大的結構數組sd[MAXSIZE] 中有兩個鏈表: 其中鏈表SL是一個帶頭結點的單鏈表,表示了線性表(a1, a2, a3, a4, a5),而另一個單鏈表AV是將當前sd 中的空結點組成的鏈表。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/394723.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/394723.shtml
英文地址,請注明出處:http://en.pswp.cn/news/394723.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

c語言判斷一個序列是不是另一個的子序列

1 #include <stdio.h>2 #include <string.h>//添加字符串頭文件3 4 int Subsequence(char s[], char t[]) 5 {6 int m,n,i,j;7 n strlen(s); //n表示序列S的長度8 m strlen(t); //m表示序列T的長度9 i0; 10 j0; 11 if (m>…

linux中python如何調用matlab的數據_特征錦囊:如何在Python中處理不平衡數據

今日錦囊特征錦囊&#xff1a;如何在Python中處理不平衡數據? Index1、到底什么是不平衡數據2、處理不平衡數據的理論方法3、Python里有什么包可以處理不平衡樣本4、Python中具體如何處理失衡樣本印象中很久之前有位朋友說要我寫一篇如何處理不平衡數據的文章&#xff0c;整理…

源碼安裝zabbix遇到的報錯集錦

報錯1&#xff1a;checking for mysql_config... configure: error: MySQL library not found 解決辦法&#xff1a;查找mysql_config #find / -name "mysql_config*" /usr/local/mysql/bin/mysql_config 在配置時將原有的 --with-mysql 改為 --with-mysql/usr/loca…

pso算法c++語言代碼,一C++PSO(PSO)算法

收集和變化PSO算法&#xff0c;它可用于參考實施&#xff1a;#include #include #include #include #include #define rand_01 ((float)rand() / (float)RAND_MAX)const int numofdims 30;const int numofparticles 50;using namespace std;//typedef void (*FitnessFunc)(fl…

Hadoop不適合哪些場景 哪些場景適合?

Hadoop設計的目的主要包括下面幾個方面&#xff0c;也就是所謂的適用場景&#xff1a; 1&#xff1a;超大文件 可以是幾百M&#xff0c;幾百T這個級別的文件。 2&#xff1a;流式數據訪問 Hadoop適用于一次寫入&#xff0c;多次讀取的場景&#xff0c;也就是數據復制進去之后&a…

微服務 邊界服務_遵循這些實用原則以獲取精心設計的微服務邊界

微服務 邊界服務by Jake Lumetta杰克盧米塔(Jake Lumetta) 遵循這些實用原則以獲取精心設計的微服務邊界 (Follow these practical principles to get well-designed microservices boundaries) 如何避免使微服務太小和緊密耦合 (How to avoid making your microservices too …

ShareEntryActivity java.lang.ClassNotFoundException | Android類找不到問題

錯誤堆棧&#xff1a; Process: com.mci.smagazine, PID: 23265java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.mci.smagazine/com.mci.smagazine.apshare.ShareEntryActivity}: java.lang.ClassNotFoundException: com.mci.smagazine.apshare…

阿里Android p6準備,項目經歷準備篇——如何準備阿里巴巴P6/P7前端面試

項目經歷準備篇——如何準備阿里巴巴P6/P7前端面試在上次的校招文章之后&#xff0c;有很多同學問有沒有社招相關的東西可以寫一篇&#xff0c;現在它來了。比起校招&#xff0c;社招更加看重項目經歷項目經歷反應的思考。本文針對的是想進入阿里的P6/P7同學&#xff0c;著重講…

for in for of區別_Python 第4課:for…in循環黃金搭檔之range()函數

樂學趣學Py● 04&#xff1a;for…in循環黃金搭檔之range()函數●Python趣味小百科Python中的繪圖模塊為什么叫Turtle海龜&#xff0c;而不是cat ,dog,bird呢&#xff1f;原來Python引用了麻省理工大學教授開發的logo海龜制圖語言,能通過繪圖直觀地教大家學習編程。實踐是最好的…

《游戲設計師修煉之道:數據驅動的游戲設計》一3.8小結

3.8小結 在玩游戲期間使用的數學知識通常相當簡單&#xff0c;盡管代碼中使用的數學知識可能非常復雜。玩家不希望由于在玩游戲期間不得不處理許多數字而分心&#xff0c;因為他們的大腦必須從控制角色的動作轉換到記住數字的含義。許多游戲回避了數字&#xff0c;而是通過像計…

ubuntu下安裝配置nfs

sudo apt-get install nfs-kernel-server sudo /nfs_root vim /etc/exports 在這個文件末尾添加 /nfs_root *(rw,sync,no_root_squash) 保存退出 重啟nfs服務 sudo /etc/init.d/rpcbind restart sudo /etc/init.d/nfs-kernel-server restart 測試 sudo mount 192.168.2.1:/nf…

使命愿景價值觀_為什么在制作產品時應該專注于愿景,價值,風險和先例

使命愿景價值觀by Steve史蒂夫(Steve) 為什么在制作產品時應該專注于愿景&#xff0c;價值&#xff0c;風險和先例 (Why you should focus on vision, value, risk, and precedent when making your product) 幾周前&#xff0c;產品開發人員John Cutler發表了一篇出色的文章&…

安卓前端布局Android,Android開發的幾種常見布局

目前正在從事iOS開發&#xff0c;對于安卓就是大學的時候自學了點&#xff0c;做過幾個小的項目&#xff0c;軟件外包大賽、計算機設計大賽、移動應用大賽都拿過獎項&#xff0c;呵呵。。。現在回想起來以前大學做的安卓比賽是多么的幼稚。 從現在開始我要從頭一步一步回顧安卓…

《Cocos2D權威指南》——3.9 本章小結

3.9 本章小結 本章對Cocos2D中的幾個核心類&#xff08;CCNode、CCScene、CCLayer、CCSprite&#xff09;進行了詳細介紹&#xff0c;并且通過節點層級圖讓大家了解到Cocos2D游戲的基本組成&#xff1b;然后介紹了Cocos2D中的單例。通過完善第2章的游戲實例&#xff0c;大家對…

永恒python圖片_python 數據詞云展示實例(3)- 背景圖設置

記錄wordcloud庫背景圖的設置及樣板 之前介紹了wordcloud的基本使用wordcloud的基本使用&#xff0c;本文記錄一下如何設置背景圖。 樣圖 背景圖tim.jpg 生成樣圖dream.png 樣板 from PIL import Image,ImageSequence image Image.open(tim.jpg)#打開背景圖 graph np.array(im…

創造的快樂

早上9點半到的圖書館&#xff0c;十點左右才進入狀態&#xff0c;上午和下午的一半時間都用來看AMD的GCN架構&#xff0c;看這種官方的文檔&#xff0c;和論文一樣&#xff0c;只看摘要和圖片&#xff0c;沒有死磕的精神&#xff0c;很難有收獲&#xff0c;結果就是&#xff0c…

python心得-基本概念2

一 編程語言介紹 1.1 機器語言&#xff1a;直接用計算機能理解的二進制指令編寫程序&#xff0c;直接控制硬件 1.2 匯編語言&#xff1a;用英文標簽取代二進制指令取編寫程序&#xff0c;本質也是在直接控制硬件 1.3 高級語言&#xff1a;用人能理解的表達方式去編寫程序&#…

初創團隊最重要的是什么_我從一家出色的初創公司工作中學到的最重要的教訓...

初創團隊最重要的是什么by Yan Cui崔燕 我從一家出色的初創公司工作中學到的最重要的教訓 (The most important lessons I learned from working at an amazing startup) I recently left Space Ape Games after a wonderful year. I learnt a lot, and worked on some challe…

企業如何杜絕云端數據泄密?

一直以來&#xff0c;云計算所倡導的就是&#xff1a;“我們可以做得更好&#xff0c;更便宜”。云計算帶給企業諸多利好&#xff0c;但實施云計算必然會加劇信息泄露風險。當企業打算把所有數據傳輸云端的時候&#xff0c;首先要考慮的就是數據保護的問題。 使用云服務&#x…

3dmark for android,Android版3DMark首測

聽到這個消息估計很多像我一樣看膩了3dmark11畫面的跑分黨及玩家們有些許小失望。 每年的12月影馳都會聯合NVIDIA舉辦盛大的嘉年華&#xff0c;今年在武漢舉辦的影馳2012電子競技嘉年華的合作伙伴名單上出現了futumark的身影。Futuremark中國區負責人影馳在當天的平板體驗區也提…