線性表的實現(一)順序儲存結構

2021-07-06 08:34:52 字數 3289 閱讀 4067

1、基本概念

介面檔案:

#ifndef  __my_seqlist_h__ 

#define __my_seqlist_h__

typedef void seqlist;

typedef void seqlistnode;

seqlist* seqlist_create(int capacity);

int seqlist_create01(seqlist **handle, int capacity);

void seqlist_destroy(seqlist* list);

void seqlist_clear(seqlist* list);

int seqlist_length(seqlist* list);

int seqlist_capacity(seqlist* list);

int seqlist_insert(seqlist* list, seqlistnode* node, int pos);

seqlistnode* seqlist_get(seqlist* list, int pos);

seqlistnode* seqlist_delete(seqlist* list, int pos);

#endif //__my_seqlist_h__

實現檔案:

typedef struct _tag_seqlist

tseqlist;

seqlist* seqlist_create_01(int capacity)

ret = (tseqlist *)malloc(sizeof(tseqlist));

if (ret == null)

memset(ret, 0, sizeof(sizeof(tseqlist)));

ret->node = (unsigned int *)malloc(sizeof(unsigned int )*capacity);

if (ret ->node == null)

memset(ret->node, 0, sizeof(unsigned int )*capacity);

ret->capacity = capacity;

ret->length = 0;

return ret;

}seqlist* seqlist_create(int capacity)

ret = (tseqlist *)malloc(sizeof(tseqlist) + sizeof(unsigned int )*capacity );

if (ret == null)

memset(ret, 0, sizeof(sizeof(tseqlist)) + sizeof(unsigned int )*capacity );

ret->node = (unsigned int *)(ret +1); //ret向後跳sizeof(tseqlist)

ret->capacity = capacity;

ret->length = 0;

return ret;

}void seqlist_destroy(seqlist* list)

free(list);

return ;

}//鍊錶清零 。。。長度為零

void seqlist_clear(seqlist* list)

tlist = (tseqlist *)list;

tlist->length = 0;

return ;

}int seqlist_length(seqlist* list)

return tlist->length;

}//線性表的容量和線性表長度是不一樣的

int seqlist_capacity(seqlist* list)

return tlist->capacity;

}int seqlist_insert(seqlist* list, seqlistnode* node, int pos)

//檢視是不是滿了

if (tlist->length >= tlist->capacity)

//位置錯誤判斷

if (pos<0 || pos>=tlist->capacity)

//優化的容錯。。。

if (pos >=tlist->length)

//插入演算法

//從pos位置處開始,把陣列後面的元素依此後移

for(i=tlist->length; i>pos; i--)

//迴圈跳出以後,pos正好是,要出入的位置

tlist->node[pos] = (unsigned int)node;

tlist->length ++;

return 0;

}seqlistnode* seqlist_get(seqlist* list, int pos)

ret = (seqlistnode*)tlist->node[pos];

return ret;

}seqlistnode* seqlist_delete(seqlist* list, int pos)

//賦給a3之前,要把a3元素快取下來

ret = (seqlistnode *)tlist->node[pos];

//刪除演算法

for (i=pos+1; ilength; i++)

tlist->length --;

return ret;

}

測試檔案:

typedef struct _teacher

teacher;

int main()

} //迴圈刪除

for (i=0; i優點:

無需為線性表中的邏輯關係增加額外的空間

可以快速的獲取表中合法位置的元素

缺點:

插入和刪除操作需要移動大量元素

當線性表長度變化較大時難以確定儲存空間的容量

線性表的順序儲存 線性表的順序儲存結構

1,本文實現乙個線性表 2,順序儲存定義 1,線性表的順序儲存結構,指的是用一段位址連續的儲存單元依次儲存線性表中的資料元素 2,在 c 中可以用乙個陣列作為介質來儲存資料元素 3,設計思路 1,可以用一維陣列實現順序儲存結構 1,儲存空間 t m array 2,當前長度 int m length...

線性表(一) 順序儲存結構

線性表 list 零個或多個資料元素的有限序列。線性表的抽象資料型別 adt 線性表 list data 線性表的資料物件集合為 a1,a2,an 每個元素的型別均為datatype。其中,除第乙個元素a1外,每乙個元素有且只有乙個直接前驅元素,除了最後乙個元素an外,每乙個元素有且只有乙個直接後繼...

線性表 線性表的順序儲存結構

線性表的順序儲存結構 線性結構是乙個資料元素的有序 次序 集。集合中必存在唯一的乙個 第一元素 集合中必存在唯一的乙個 最後元素 除最後元素外,均有唯一的後繼 除第一元素外,均有唯一的前驅。adt list 資料關係 r1 adt list 容易混的概念 引用符號 和引用型操作沒有關係 加工型操作 ...