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 容易混的概念 引用符號 和引用型操作沒有關係 加工型操作 ...