學習的時候能將自己學到的東西寫出來也是一種很好的學習方法,它既能加深學習的效果,又能知道自己對學習內容的了解情況。如果你寫不出來也就說明你對所學的內容並不是完全了解,還有值得重新學習的地方。
本人大學只學習過乙個學期的c
語言,其他諸如資料結構與演算法壓根就沒有學過,奈何畢業後從事的是與軟體開發有關的工作,既然喜歡程式設計,這門課也只能自己自學啦。
資料結構學習中的第乙個資料結構是線性表。分兩種,一種是順序表,一種是鍊錶。
1. 順序表——是在計算機記憶體中以陣列形式儲存的線性表,是指用一組位址連續的儲存單元依次儲存資料元素的線性結構。時間複雜度:插入
o(n)
;查詢特定節點
o(logn)
;訪問特定編號節點
o(1);
o(1)
;查詢特定節點
o(n)
;訪問特定編號節點
o(n)
。鍊錶可以分為:單向鍊錶,雙向鍊錶,迴圈鍊錶三種。
3. 順序表的資料結構:
/* 線性表的動態分配順序儲存結構 */
#define list_init_size 100 /* 線性表儲存空間的初始分配量 */
#define list_increment 10 /* 線性表儲存空間的分配增量 */
typedef int elemtype;
typedef int status;
typedef struct
sqlist;
這裡解釋一下length
和listsize
的意思,打個比方,
listsize
就是水杯,
length
是水杯裡的水,解釋完畢。
4. 鍊錶的資料結構:
typedef int elemtype;
typedef int status;
typedef struct lnode
lnode, *linklist;
5 . 線性表的基本操作:(以單鏈表為例,後續補充順序表,雙向鍊錶和迴圈鍊錶)
/* 線性表初始化 */
status initlinklist(linklist &l)
/* 求線性表表長 */
int linklistlength(linklist l)
return i;
}/* 獲得表中某個資料 */
void getelem(linklist l, int i, elemtype *e)
(*e) = q->data;
}/* 按某個資料查詢表 */
int findlinklist(linklist l, elemtype e)
} return -1;
}/* 插入操作 */
void insertelem(linklist l, int i, elemtype e)
p = (linklist)malloc(sizeof(lnode));
p->data = e;
p->next = q->next;
q->next = p;
}/* 刪除操作 */
void deleteelem(linklist l, elemtype e)
else
}}/* 構造鍊錶 */
void createlinklist(linklist l, int n)
}/* 判斷鍊錶是否為空 */
status linklistempty(linklist l)
/* 列印鍊錶 */
void printlinklist(linklist l)
printf_s("\n");
}
小白學資料結構 線性表
順序表的操作可視為一維陣列的操作,不予贅述。線性鍊錶的基本操作 構造鍊錶以及對其增刪查改等,在此列出在指定位置插入節點和刪除節點的 c語言實現 include include include typedef int elemtype typedef struct linear list 動態定義線性...
mysql 線性表 資料結構之線性表
概要 參考 大話資料結構 把常用的基本資料結構梳理一下。線性表定義 線性表 list 零個或多個資料元素的有限序列。若將線性表記為 a 1,cdots,a a i,a cdots,a n 則表中 a 領先於 a i a i 領先於 a 稱 a 是 a i 的直接前驅元素,a 是 a i 的直接後繼元...
資料結構之線性表
從現在開始,我們開始討論如何實現一些常用的資料結構和其中的一些經典演算法.等把資料結構講完了.我可能會繼續討論vc 的程式設計只是以及vs平台下的c c 開發等等.呵呵.我們進入正題吧.我在這裡就只實現線性表的連表結構.當然了,這裡實際上包含了好多知識.我希望大家在引用的時候.一定要領悟裡面的一些變...