線性表的順序儲存結構指的是用一段位址連續的儲存單元依次儲存線性表的資料元素。
int getelem(sqlist l, int i, elemtype e)
e=l.data[i-1];
return 1;
}
插入演算法思路:
1.如果插入的位置不合理,丟擲異常。
2.如果線性表的大小大於等於陣列長度,則丟擲異常或動態增加容量。
3.從最後乙個元素開始向前遍歷到第i個位置,分別將他們向後移動乙個位置。
4.將要插入元素插入位置i處。
5.表長+1。
int listinsert(sqlist l, int i, elemtype e)
for(k=l.length-1;k>i-1;k--)
l.data[i-1]=e; //將新元素插入
l.length++; //表長+1
return 1;
}
刪除演算法思路:
1.如果刪除位置不合理,丟擲異常。
2.取出刪除元素。
3.從刪除元素開始遍歷到最後乙個元素位置,分別將他們向前移動乙個位置。
4.表長-1。
int listdelete(sqlist l, int i, elemtype e)
i--; //將順序表的邏輯順序轉化為物理順序
e=l.data[i];
for(k=i;k優點:無須為表示表中的元素之間的邏輯關係而增加額外的儲存空間;可以快速的訪問表中任一位置的元素。
缺點:插入和刪除操作需要移動大量的元素;當線性表長度變化較大時,難以確定儲存空間的容量;造成儲存空間的「碎片」。
n個結點(ai的儲存映像)鏈結成乙個鍊錶,即為線性表(a1,a2,...,an)的鏈式儲存結構,鍊錶每個結點中只包含乙個指標域,所以叫做單鏈表。鍊錶中第乙個結點的儲存位置叫做頭指標。為了更加方便的操作鍊錶,會在單鏈表的第乙個結點前設乙個結點,叫做頭結點。
int getelem(linklist l, int i, elemtye e)
if(!p||k>i)
e=p->data; //取出第i個元素的值
}
單鏈表第i個資料插入結點的演算法:
1.宣告結點p指向鍊錶的第乙個結點,初始化j從0開始。
2.當j
3.若鍊錶末尾p為空,則說明第i個元素不存在。
4.否則查詢成功,在系統內生成乙個空結點。
5.將元素e的值賦給s->data。
6.單鏈表插入語句s->next=p->next;p->next=s。
7.返回成功。
int listinsert(linklist l, int i, elemtye e)
if(!p||j>i-1)
s=(linklist)malloc(sizeof(node)); //生成新結點
s->data=e;
s->next=p->next; //將p的後繼結點賦給s的後繼
p->next=s; //將s的值賦給p的後繼
return 1;
}
單鏈表第i個資料刪除結點的演算法:
1.宣告p結點指向鍊錶的第乙個結點,初始化j從0開始。
2.當j
3.若鍊錶末尾p為空,則說明第i個元素不存在。
4.否則查詢成功,將要刪除的結點p->next賦值給q。
5.單鏈表的刪除語句p->next=q->next。
6.將q結點的資料賦值給e。
7.釋放q。
8.返回成功。
int listdelete(linklist l, int i, elemtye e)
if(!p||j>i-1)
q=p->next; //將p的後繼賦值給q
p->next=q->next; //將q的後繼賦值給p的後繼
e=q->data; //將q結點的值賦值給e
free(q); //釋放q
return 1;
}
線性表順序儲存和鏈式儲存對比:
1.若線性表需要頻繁查詢,很少進行插入和刪除操作,適合採用順序儲存,反之使用鏈式儲存。
2.當線性表的元素個數變化較大或者不知道有多大,適合採用鏈式儲存,這樣無需考慮儲存空間的大小,反之若是事先知道線性表的大概長度適合順序儲存。
資料結構線性表1
include include include struct arr 定義了乙個資料型別,該資料型別的名字是struct arr void init arr struct arr parr,int length bool insert arr struct arr parr,int pos,int ...
資料結構 線性表1
一 線性表 定義 由零個或多個資料元素組成的有限序列。強調 1 線性表是乙個序列,也就是說元素之間是有先來後到的 2 若元素存在多個,則第乙個元素無前驅,最後乙個元素無後繼,其他元素都有且只有乙個前驅和後繼 3 線性表是有限的,即他能夠處理的元素是有限的 舉列 請問公司的組織架構是否屬於線性關係?答...
資料結構 線性表1
單鏈表順序鍊錶就像陣列一樣,建立鍊錶時分配的空間已經是訂好的了。大小為每乙個elem的大小 elem個數。不支援動態分配 貌似也可以但是演算法效能會下降 分配記憶體時,是以區塊來分配的,一分就分一大塊。大小為每乙個elem的大小 elem個數。不支援動態分配 貌似也可以但是演算法效能會下降 查詢el...