最近感覺時間過得好快,還沒做什麼,就又是三天過去了。這三天做題方面,二分還能稍微好一點,雖然還是不能很好的把實際問題轉化成二分的方法,但也做出來了幾道題,也還算是有思路。不過單調佇列到現在也沒有做出來一道題,還是要加強關於這方面的學習和練習。
上一節課學了資料結構,這裡簡單總結一下
棧
棧是只能在某一端插入和刪除的特殊線性表, 也稱為後進先出表(lifo表)。
乙個棧可以用定長為n的陣列s來表示,用乙個棧指標top指向棧頂。若top=0,表示棧空,top=n時棧滿。進棧時top加1。退棧時top減1。當top<0時為下溢。棧指標在運算中永遠指向棧頂
進棧(push)退棧的(pop)演算法:
#define n 100
void push(int s,int *top,int *x) //入棧
}void pop(int s,int *y,int *top) //出棧
}
佇列佇列是限定在一端進行插入,另一端進行刪除特殊線性表。 由於總是先入隊的元素先出隊(先排隊的人先買完東西),這種表也稱為先進先出(fifo)表。
佇列可以用陣列q[m+1]來儲存,陣列的上界m即是佇列所容許的最大容量。在佇列的運算中需設兩個指標:
head:隊頭指標,指向實際隊頭元素的前乙個位置
tail:隊尾指標,指向實際隊尾元素所在的位置
佇列很容易出現假溢位,即tail已達上界,但佇列不滿。克服假溢位的方法有兩種。一種是將佇列中的所有元素均向低位址區移動,顯然這種方法是很浪費時間的;另一種方法是將陣列儲存區看成是乙個首尾相接的環形區域。當存放到n位址後,下乙個位址就"翻轉"為1。在結構上採用這種技巧來儲存的佇列稱為迴圈佇列。
如圖:
迴圈隊的入隊演算法如下:
1、tail=tail+1;
2、若tail=n+1,則tail=1;
3、若head=tail尾指標與頭指標重合了,表示元素已裝滿佇列, 則作上溢位錯處理;
4、否則,q[tail]=x,結束(x為新入出元素)。
近期學習總結
最近在忙著小 的寫作,主要研究方向是基於p2p網路的非結構搜尋演算法,這一周似乎就沒什麼進展,原因如下 1.思路太亂,切入點沒選好,範圍有點太廣,沒有就某一點做深入的研究。缺少學習後的及時總結,總是沒有一條主線。2.為了做實驗,有點急躁,思路沒有完全理順,就想著怎麼把實驗做好,做實驗的前期準備工作沒...
近期學習總結
前乙個月被藍圖卡主一星期之後,最近學習情況一般 1,跟著flask web一書敲 遇到不懂的查 主要 2,熟悉http原理,http 3,flask原理的熟悉 wsgi介面的學習,只是大概了解了一下,如果要深入學習flask的話,wsgi是繞不過去的 4,python基礎的複習,因為最近只是在學fl...
近期學習總結
最近學習到了指標這一塊的內容,學習指標的時候 只有乙個感受,頭有點疼。首先,說到指標,他就是乙個位址,指向已經開闢好的一塊空間,int num 10 int p 這裡的p就是乙個指標,指標是乙個位址,這個位址有能力指向乙個整形,還有比如 char p,float p,因為指向的內容不同,訪問的許可權...