分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!
說在前面
資料結構和演算法是程式設計的靈魂。坦誠的說,我在這方面是弱的可以。雖然工作這麼多年了,因為種種藉口,這塊知識一直是我的痛處。
曾經在面試時大言不慚的說,這些知識在工作中很少用到,所以當年學習的東西早就還給學校了。其實不然,失去了靈魂的程式設計師如我,總是要逆襲的。
所以以後的學習中會有一些如孩童筆記般的文章出現在我的blog中,請大師們不要嘲笑,要提攜。
定義線性表可以說是最簡單的資料結構,它的描述為:n個資料元素的有限序列。
記為:l=(a1,a2,...,an)
按照儲存結構它又可以分為順序儲存結構和鏈式儲存結構。
看到這裡,我們會自然的聯想到c語言中的陣列。
下面我要實現的是線性表中的元素為整型的順序儲存結構,及它的主要運算:增刪查。
先來簡單的定義一下這個線性表的順序儲存結構:
#define maxlength 20
struct
sequencelist;
其中data陣列為這個線性表的主要部分,資料元素就存在於此陣列中,而對這個線性表的操作都是基於這個陣列。
length是這個線性表的乙個屬性,表示這個線性表包含元素的個數。
增:線性表的插入操作
對線性表的插入就是對data陣列的插入,然後將其length增加。
//insert opration
intinsert
(struct sequencelist *list,int index,int element)
list->length++; return ok;}
刪:線性表的刪除操作
類似增的相反操作。
// delete opration
intdelete
(struct sequencelist *list,int index)
list->data[length-1] = '\0';//delete the last element.
list->length--; return ok;}
查:線性表的取元素操作
用索引值查詢元素的值。
//get list elements
//make sure elemet is not null when calling.
intgetelement
(struct sequencelist list,int index,int *element)
從程式中可以看出增刪操作的時間複雜度都是0(n),所以這兩項操作都是不是它的強項。而查詢操作的時間複雜度是o(1),那麼線性表的順序儲存結構的優勢就是可以快速的取出任意位置的元素。
上面的3種操作作為較為基本的操作,是本人的學習筆記。如果大蝦們發現**有不妥,請不吝賜教。
而線性表的其他操作如求前驅元素、求後驅元素、判斷表中是否存在某元素值、清空操作等等有意思的操作還待空閒時去完成。
較為完整的除錯例子:
//lincoln
//linear list
//sequence storage structure
//#include
#define ok 1
#define error -1
#define ture 1
#define false 0
#define maxlength 20
struct
sequencelist;//get list elements
//make sure elemet is not null when calling.
intgetelement
(struct sequencelist list,int index,int *element)
//insert opration
//int
insert
(struct sequencelist *list,int index,int element)
list->length++; return ok;}// delete opration
//int
delete
(struct sequencelist *list,int index)
list->data[length-1] = '\0';//delete the last element.
list->length--; return ok;}int
main
(), 7 }; printf("list length : %d\n",list.length); //test get
int *element = 0, test = 8; element = &test; if(ok == getelement(list,2,element)) //test insert
if(ok == insert(&list,7,520)) if(ok == getelement(list,7,element)) if(ok == insert(&list,3,520)) if(ok == getelement(list,3,element)) //test delete
if(ok == delete(&list,3)) if(ok == getelement(list,3,element)) if(ok == delete(&list,6)) if(ok == getelement(list,6,element)) else }
給我老師的人工智慧教程打call!
線性表 順序儲存結構之 順序表
順序表 用順序方法儲存的線性表也叫做順序表 如果乙個線性表用一組連續的儲存單元依次儲存線性表的資料元素,那麼這個表就是順序表。類似陣列 資料元素在計算機內 物理位置相鄰 例 如果用 address ai 表示資料元素ai的儲存位置,l表示資料元素占用的儲存單元,則 address ai addres...
線性表之順序表儲存結構
順序表的儲存結構適用於一些資料相對穩定的線性表,如 學生學籍,公司職工資訊。最基本的線性表操作 新增,刪除,插入,清空,查詢,判空,判滿。順序表的儲存結構一般用陣列儲存。首先定義乙個結構體,用於儲存線性表的資料,線性表長度,以及線性表的中元素個數。struct list 第一步就是初始化表void ...
線性表的順序儲存結構(c 實現)
線性表 零個 或 多個資料的有限序列 第乙個元素沒有前驅,最後乙個元素沒有後繼 線性表的順序儲存結構,指的是用一段位址連續的儲存單元依次儲存線性表的資料元素 線性表的順去儲存是通過陣列來實現的 pragma once include using namespace std define length...