一、定義
線性表,從名字上就能感受到是具有像線一樣的性質的表。就像排隊的一隊人,乙個跟著乙個排,有人在頭,有人在尾,每個人知道前面是誰後面是誰,像一根線把他們串起來一樣。它是乙個由零個或者多個資料元素組成的有限序列。
二、線性表的順序儲存結構
1.定義:線性表的順序儲存結構,指的是用一段位址連續的儲存單元依次儲存線性表的資料元素。
2.順序表的儲存方式:在c語言中,我們可以用一維陣列來實現順序儲存結構。下面是順序表的儲存結構:
#define maxsize 20 //儲存空間初始分配的量
用陣列儲存順序表要分配固定長度的陣列空間,由於線性表要進行插入和刪除操作,所以分配的陣列空間要大於當前線性表的長度。
3、順序儲存結構的獲取與插入與刪除操作
獲取元素操作:
#define ok 1 //前提是順序表l存在,且1<=i<=listlength(l)
#define error 0
#define true 1
#define false 0
typedef int status;
status getelem(sqlist l,int i,elemtype *e)
status listinsert(sqlist *l,int i,elemtype e)
l->data[i-1]=e; //新元素插入
l->length++;
return ok;
}
status listdelete(sqlist *l,int i,elemtype *e)
l->length--;
return ok;
}
三、線性表的鏈式儲存結構
1.定義:為了表示每個資料元素a[i]與其後繼資料元素a[i+1]之間的邏輯關係,對於資料元素a[i]來說,除了儲存本身的資訊以外,還需要儲存乙個指示其後繼的資訊(直接後繼的儲存位置)。把儲存資料元素資訊的域稱為指標域,把儲存直接後繼位置的域稱為指標域。這兩個部分資訊組成資料元素a[i]的儲存映像,稱為節點node。
2.鍊錶的儲存結構(以單鏈表為例子):鍊錶中第乙個節點的儲存位置叫做頭指標,之後的每乙個節點,就是上乙個後繼指標指向的位置。為了方便操作,會在單鏈表的第乙個節點前設定乙個頭節點,它的資料域不儲存任何資訊,頭結點的指標域儲存指向第乙個節點的指標。下面是單鏈表的儲存結構:
typedef struct nodenode;
typedef struct node *linklist;
3.鍊錶的獲取插入與刪除(以單鏈表為例)
獲取元素:
status getelem(linklist l,int i,elemtype *e)
if(!p||j>1) //第i個節點不存在
return error;
*e=p->data; //取第i個節點的資料
return ok;
}
單鏈表的插入元素操作:
status listinsert(linklist *l,int i,elemtype e)
if(!p||j>i) //第i個節點不存在
return error;
s=(linklist)malloc(sizeof(node)); //生成新的節點
s->data=e;
s->next=p->next; //將p的後繼節點賦值給s的後繼
p->next=s; //將s賦值給p的後繼
return ok;
}
單鏈表的元素刪除操作:
status listdelete(linklist *l,int i,elemtype *e)
if(!(p->next)||j>i) //第i個節點不存在
return error;
q=p->next;
p->next=q->next; //將q的後繼賦值給p的後繼
*e=q->data; //將q節點中的資料給e
free(q); //**節點,釋放記憶體
return ok;
}
以上的鍊錶的操作均以單鏈表為例子,其他鍊錶的操作寫在後續的文章當中。
四、總結順序儲存結構和單鏈表儲存結構的優缺點
1.儲存分配方式:
順序儲存結構用一段連續的儲存單元依次儲存線性表的資料元素。
單鏈表採用鏈式儲存結構存放線性表的資料元素。
2.時間效能:
(1)查詢:
順序儲存結構o(1)
單鏈表o(1)
(2)插入與刪除:
順序儲存結構需要平均移動表長一半的元素,時間為o(n)。
單鏈表在知道某位置的指標後,插入與刪除時間僅為o(1)。
3.空間效能:
順序儲存結構需要與分配儲存空間,分大了,浪費,分小了發生上溢。
單鏈表不需要分配儲存空間,只要有就可以分配,元素個數不受限制。
資料結構(線性表)
1.試寫一演算法,在無頭結點的動態單鏈表上實現線性表操作insert l,i,b 並和在帶頭結點的動態單鏈表上實現相同操作的演算法進行比較。status insert linklist l,int i,int b 在無頭結點鍊錶l的第 i個元素之前插入元素 belse insert 2.已知線性表中...
資料結構 線性表
參考 一 線性表 順序表 單鏈表 迴圈鍊錶 雙鏈表 順序表 1.表的初始化 void initlist seqlist l 2.求表長 int listlength seqlist l 3.取表中第i個結點 datatype getnode l,i 4.查詢值為x的結點 5.插入 具體演算法描述 v...
資料結構 線性表
線性表是最基礎的一種資料結構,這樣的資料物件包含的資料元素具有一對一的前驅後繼關係。按其邏輯儲存方式的不同可分為兩類線性表 順序表和鏈式表。其中鏈式表又可分為線性鍊錶 迴圈鍊錶和雙向鍊錶。下面分別介紹下這幾種線性表的資料結構 1.順序表 typedef struct sqlist 插入演算法 i到n...