以圖明志

數據結構

[專題] 題外話:談談malloc()和free()

malloc()和free()里的學問
對于串的順序存儲,有些需要補充說明。串值的存儲空間可在程序執行過程中動態分配而得。比如在計算機中存在一個自由存儲區,叫做“堆”。這個堆可由C語言的動態分配函數malloc()和free()來管理。那么今天就來點題外話,談談malloc()和free()。

數據結構

[專題] 字符串中的子串替換

串的替換
在很多編程語言中,都封裝了字符串替換的操作,那么我們這里自己用C語言來實現一個字符串替換的函數。具體需求為:Replace(String S,String T,String V),用V替換主串S中出現的所有與T相等的不重疊的子串。字符串替換這個操作,需要結合我們前面講到的幾個函數。

數據結構

[專題] 如何在串中刪除特定長度的子串

串的刪除
昨天我們寫了如何在串中插入另外一個串,那么今天我們來看看對應的操作:如何在串中刪除指定長度的子串。也就是,從串S1中刪除第pos個字符起長度為len的子串。其實就是數組操作啦,把第pos個元素起的len個元素去掉即可。具體怎么去掉呢?把S[pos+len]賦值給S[pos],把S[pos+len+1]賦值給S[pos+1]……以此類推就OK了。

數據結構

[專題] 如何在串中插入串

串的插入
繼續完成一些常見的操作。比如有兩個串s1,s2,現在需要把s2安插到s1的特定位置,我們今天來解決這個問題。還是要根據截斷分為兩種情況。如果沒有截斷的話,就可以將s2完全插入到s1里。首先從s1的末尾,將從pos位置到末尾的元素復制過去。比如nowamagic.net需要在第4個位置插入lol,則從第四個位置起,將整個s1拷過去,即nownowamagic.net

數據結構

[專題] 尋找子串在主串中的位置

匹配主串與子串的過程
我們先來看這么一個需求。比如主串是 nowamagic.net,子串是 magic,那么如何知道 magic 在主串的第幾個字符后的位置呢?設i用于主串s1中當前位置下標值,j用于子串sub中當前位置下標值。首先我們比較s1[1]與sub[1],如果相同的話,可能子串就開始了。如果不相等,那么子串仍然是從sub[1]開始,而主串s1則以s1[2]與其比較。

數據結構

[專題] 串最基本的5個操作的C實現

串的最小操作子集
前面談到串的最小操作子集:串賦值StrAssign,串比較StrCompare,求串長StrLength,串聯接Concat,求子串SubString。這5種操作不可能利用其他串操作來實現,但其他串操作均可在這個最小操作子集上實現。這里我們寫程序實現上面的操作吧。

數據結構

[專題] 串的順序存儲結構

串在內存中如何存儲?
串的順序存儲結構是用一組地址連續的存儲單元來存儲串中的字符序列的。按照預定義的大小,為每個定義的串變量分配一個固定長度的存儲區。一般是用定長數組來定義。既然是定長數組,就存在一個預定義的最大串長度,一般可以將實際的串長度值保存在數組的0下標位置,有的書中也會定義存儲在數組的最后一個下標位置。

數據結構

[專題] 串的抽象數據類型ADT

定義串的一些操作
串的邏輯結構和線性表很相似,不同之處在于串針對的是字符集,也就是串中的元素都是字符,哪怕串中的字符是“123”這樣的數字組成,或者“2010-10-1CT這 樣的日期組成,它們都只能理解為長度為3和長度為10的字符串,每個元素都是字符而已。

數據結構

[專題] 如何比較串的大小

其實就是比較串的內部編碼
兩個數字,很容易比較大小。2比1大,這完全正確,可是兩個字符串如何比較呢?事實上,串的比較是通過組成串的字符之間的編碼來進行的,而字符的編碼指的是字符在對應字符集中的序號。計算機中的常用字符是使用標準的ASCII編碼,更準確一點,由7位二進制數表示一個字符,總共可以表示128個字符。

數據結構

[專題] 數據結構里的串是什么東西?

就是字符串啦
早先的計算機在被發明時,主要作用是做一些科學和工程的計算工作,也就是現在我們理解的計算器,只不過它比小小計算器功能更強大、速度更快一些。后來發現,在計算機上作非數值處理的工作越來越多,使得我們不得不需要引入對字符的處理。于是就有了字符串的概念。

數據結構

[專題] 循環隊列與鏈隊列的優劣勢

循環隊列、鏈隊列分別什么時候用
從時間上,其實它們的基本操作都是常數時間,即都為0(1)的,不過循環隊列是事先申請好空間,使用期間不釋放,而對于鏈隊列,每次申請和釋放結點也會存在一些時間開銷,如果入隊出隊頻繁,則兩者還是有細微差異。對于空間上來說,循環隊列必須有一個固定的長度,所以就有了存儲元素個數和空間浪費的問題。

數據結構

[專題] 補完鏈隊列的其它常見操作

置空、求長度、判斷空等
返回隊頭元素:若隊列不空,則用e返回Q的隊頭元素,并返回OK,否則返回ERROR。求隊列的長度:求鏈隊列的長度,用一個工作指針遍歷隊列然后記錄長度即可。判斷隊列是否為空:判斷鏈隊列是否為空很簡單,比較隊頭指針與隊尾指針是否重合即可,Q.front==Q.rear 。

數據結構

[專題] 鏈隊列的出隊操作

刪除首元結點的算法步驟
出隊操作時,就是頭結點的后繼結點出隊,將頭結點的后繼改為它后面的結點,若鏈表除頭結點外只剩一個元素時,則需將rear指向頭結點。要刪除掉a1結點,思路很簡單,就是讓頭結點Q->front的后繼next直接指向a2。但是a2如何標識呢?假設a1結點為p結點,那么a2就是p->next了。如何讓a1結點存到p呢?

數據結構

[專題] 鏈隊列的入隊操作

與鏈表插入大致相同
入隊操作時,其實就是在鏈隊列(鏈表)的尾部插入結點。根據這個圖,我們就可以大概知道入隊操作的步驟了。根據圖,我們先創建一個結點s,QueuePtr s=(QueuePtr)malloc(sizeof(QNode));然后給s的data域賦值e,指針域next賦值null。s->data=e;s->next=NULL; 目的就是讓它成為新任隊尾元素。

數據結構

[專題] 鏈隊列的初始化操作

還有return和exit有區別
鏈隊列的初始化應該怎么寫呢?要初始化一個鏈隊列,我們這么這么做:產生頭結點 (QueuePtr)malloc(sizeof(QNode)),然后讓隊頭指針(頭指針)與隊尾指針都指向頭結點。置空頭結點 Q->front 的指針域 Q->front->next=NULL;

數據結構

[專題] 鏈隊列:隊列的鏈式存儲結構

鏈隊列的結構體定義
隊列的鏈式存儲結構,其實就是線性表的單鏈表,只不過它只能尾進頭出而已,我們把它簡稱為鏈隊列。為了操作上的方便,我們將隊頭指針指向鏈隊列的頭結點,而隊尾指針指向終端結點。當隊列為空時,front和rear都指向頭結點。與鏈棧一樣,我們分兩步定義鏈隊列的結構體,首先是按鏈表來定義鏈隊列的結點。
1 / 10 首頁 < Prev 1 2 3 4 5 Next > 尾頁 頁碼:
云南快乐十分走势一定牛 5分快3开奖结果下载 股票入门视频推荐 北京快三和值走势图彩经网 体育彩票大乐透玩法 东方能源股票趋势 太行水泥股东大会09年股票涨跌 贵州省快3开奖计划 河南十一选五走势图官网 天津快乐10分钟软件 理财平台排行哪个比较靠前