資料結構 表

2021-08-17 16:00:47 字數 2882 閱讀 2057

抽象資料型別(abstract data type,adt)是一些操作的集合。

#對諸如表,集合,圖和他們的操作一起

可以看做是抽象資料型別。

#稱乙個元素前邊的元素其前驅,後邊的為其後繼不定義首元素的前驅和末元素的後繼

要定義的操作:printlist, makeempty, insert, delete, find, findkth, next, previous......

#printlist和find使用線性時間實現,findkth花費常數時間。但insert和delete花費為o(n),鑑於他們大都是需要大量呼叫的函式,線性時間顯得有些長了

#另乙個缺點是需要提前知道表的大小

#鍊錶是不連續儲存的,這就避免了增刪元素時造成的整體移動

#元素由不連續的結構組成,因此能夠避免因增刪乙個元素造成的整體移動

#通常在首元素a1之前再增添一項a0,以避免在方法裡出現對首元素的特判(因為首元素是沒有前驅的,這將會影響到很多方法),稱其為表頭

#方法及其實現的例程:

#(1)鍊錶的宣告與準備工作

#ifndef _list_h

struct node;

typedef struct node *ptrtonode;

typedef prttonode list;

typedef ptrtonode position;

list makeempty(list l);

int isempty(list l);

int islast(position p,list l);

position find(elementtype x,list l);

void delete(elementtype x,list l);

position findprevious(elementtype x,list l);

void insert(elementtype x,list l,position p);

void deletelist(list l);

position header(list l);

position first(list l);

position advance(position p);

elementtype retrieve(position p);

#endif // _list_h

//以上放入標頭檔案,以下放入實現檔案(沒錯我就是傳說中的分割線!!!)

struct node

;

(2)測試是否為空表,如果是則返回true

int

isempty(list l)

(3)測試當前元素是否為鍊錶尾元素,若是則返回true

int

islast(position p,list l)

(4)find 若x存在於鍊錶中,返回其位置指標,否則返回null

position

find(elementtype x,list l)

(5)delete 刪除鍊錶中第一次出現的該元素

void

delete( elementtype x, list l)

}

(6)findprevious 找到第一次出現的x的前驅的位置,如果沒有則返回末位置

position

findprevious( elementtype x, list l )

(7)insert 插入(預設為插入到指定位置的前邊)

void

insert( elementtype x, position p )

(8)常見的錯誤:

#指標不能指向乙個值為null 的指標,否則編譯器會報錯

#宣告乙個指向結構的指標並不建立該結構只是給出足夠的空間容納結構可能使用的位址。建立乙個未被宣告過記錄的唯一方法是使用malloc函式。

#使用malloc後應配對地用free( )來**那些用不到的空間。free( p )的效果是p正指向的位址沒有改變,但在改位址上的資料已經無定義了。

#對於要捨棄的空間,應該使用乙個臨時的變數,因為釋放空間後就不能再引用它。附上例子如下:

void

delete( elementtype x, list l )

} //正確的做法應該是在while迴圈中宣告乙個臨時的position指標tmp = p->next

//在對p使用free()後讓p = tmp 從而完成步進。

#雙鏈表:在鍊錶的基礎上新增乙個結構成員,表示指向其前驅的指標。這樣開銷只是多出乙個額外的鏈,但對於處理倒序掃瞄鍊錶的情況十分好用,並且簡化了delete操作(請自行思考原因)。

#迴圈鍊錶:讓最後的單元反過來指向第乙個單元就形成乙個迴圈鍊錶,這是當前流行的做法。可以加表頭也可以不加。

資料結構 表

1st 更新 以前的時候一直對資料結構懷有一種仰視的態度,最近在看 資料結構與演算法分析 似乎一下子找到了一些感覺。可能就是一直在想的,應用。這裡結合arraylist和linkedlist理解一下表的資料結構。主要是自己的一些理解,其中難免由於個人能力理解不準確的地方,所以請以批判的眼光看待 寫作...

資料結構 順序表

順序表的特徵 1由唯一的表名標識 2佔據一塊連續的儲存空間 3資料順序存放,元素之間有先後關係 定義動態的順序表 define maxsize 100 typedef struct sqlist 這個結構體型別存放的是順序表的資訊和順序表的資料 初始化順序表 void initsqlist sqli...

資料結構 鍊錶

鍊錶 what 就是一張鏈式儲存的表,是一種資料結構,是基礎,所以還是不要想有什麼用。具體呢?在c中就用結構體實現物件描述,然後通過函式來實現各個基本操作 c 則用類來表述,c中的結構體就可以看成c 中的類,然後通過類封裝各個操作步驟。這些操作實現後就需要 來測試,號稱demo,就是main函式裡面...