本人是乙個大三的學生,最近在看資料結構,也是第一次寫自己的部落格,有錯勿噴。可能在大學的學生都覺得資料結構是比較難的一門課程,也有許多難掌握的知識。但是在自己多次實踐過後就感覺沒有那麼困難,還是很容易掌握的。
在學習過後我覺得資料結構的順序儲存就相當於陣列,陣列大家應該都不陌生吧。接下來我就給大家看一下我自己寫的資料結構的順序儲存的**
1、你必須要定義乙個你順序表要儲存的資料型別 和你的順序表的大小:
#define maxsize 50
typedef int elemtype;
2、在定義了你順序表的大小和資料型別後你就可以定義乙個順序表的儲存結構:
typedef struct sqllist;
3、做完了初始的工作就可以給你的順序表分配空間了,我寫了乙個initiallist()函式來初始化
void initiallist(sqllist *&l)
很好你的順序表已經建好了,是不是感覺跟陣列很像。相當於int l[50];。接下來就是對線性表的操作。在這裡我要說一下對於&這個取位址符何時有,何時無。當你對你所操作的順序表結構有影響的時候就可以用取位址符。如:插入了乙個元素,刪除乙個元素等。當你僅僅只想獲取他的一些資訊就可以不用這個取位址符。如:獲取他的元素,獲取他的長度。
4、對線性的操作:
(1)摧毀線性表,直接把這段記憶體**就可以了:
void destroylist(sqllist *&l)
(2)判斷線性表是否為空,我們只需判斷線性表的長度是否為0就可以了:
bool islistempty(sqllist *l)
(3)獲取線性表的長度
int listlength(sqllist *l)
(4)輸出線性表的長度,是不是感覺和陣列一樣:
條件:線性表是否為空
操作:在滿足條件的時候才輸出線性表
void displist(sqllist *l)
for (int i = 0; i < l->length; i++)
cout << endl;}
(5)獲取第線性表第i個位置上的元素,用e返回:
條件:所取的位置在1到線性表的長度之間(在這裡說一下i是我們所說第幾個,返回的是線性表的儲存結構,所以要i-1)
bool getlocationelement(sqllist *l, int i, elemtype &e)
(6)線性表中是否存在給定的元素如果存在返回元素的位置,不存在返回0
int location(sqllist *l, elemtype e)}
(7)接下來是比較麻煩的插入和刪除乙個元素
我先講一下思路:插入元素主要是把第i個元素以及後面的元素往後面移動乙個位置,這樣原來第i個元素就到了i+1個位置,但是第i個位置元素還是原來的元素,我們現在就可以給第i個位置賦值就可以把原來的值覆蓋。你的插入就算完成了,插入了乙個元素你的線性表的長度也增加了,所以線性表的長度也應該加1。具體看下**吧,不懂得自己動手畫一畫應該很快就會理解的。
bool listinsert(sqllist *&l, int i, elemtype e)
l->data[i - 1] = e;
l->length++;
return true;
}刪除的操作就把元素往前移動乙個位置:
bool listdelete(sqllist *&l, int i, elemtype &e)
l->length--;
return true;
}
初識資料結構
資料結構 是將現實中大量而複雜的問題以特定的資料型別以及特定的儲存結構儲存到記憶體中,以及在此基礎上為實現某個功能而執行的相應操作 演算法 一 線性結構 連續儲存 陣列 離散儲存 鍊錶 線性結構常見應用 棧 資料結構中沒有堆,棧即堆疊 佇列 二 非線性結構 樹 圖三 查詢與排序 折半查詢 快排 冒泡...
初識資料結構
演算法是對解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,並且每條指令表示乙個或多個操作。演算法的特性 零個或多個輸入 乙個或多個輸出 有窮性 有限步驟 確定性 每一步都有確定的含義,不會出現二義性 可行性 每一步都必須可行,即每一部都能通過執行有限次數完成 演算法設計的要求 正確性 即...
初識資料結構
複雜度 粗略衡量演算法好壞的刻度尺。工具 兩個維度 快慢 時間複雜度 使用空間的情況 空間複雜度 之間利用允許時間衡量不現實。測試環境多變,不好控制變數。前提 如果指定的cpu的情況下,單位時間內執行的基本指令的個數是固定的。如果乙個演算法需要的指令比另乙個演算法需要的個數小,就可以推算a執行的更快...