線性表
是具有相同型別的n(n>=0)個元素的有限序列,其中n為表長,當n=0時,該錶為空表。線性表的特點
線性表的九種基本操作
initlist(&l):初始化表。構造乙個空的線性表。
destroylist(&l):銷毀操作。銷毀線性表,並釋放線性表l所占用的記憶體空間。
locateelem(l,e):按值查詢操作。在表中l查詢具有給定關鍵字值的元素。
getelem(l,i):按位置查詢操作。獲取表l中的第i個位置的元素的值。
listinsert(&l,i,e):插入操作。在表l中的第i個位置上插入指定元素。
listdelete(&l,i,&e):刪除元素。刪除表l中第i個位置元素,並用e返回刪除元素的值。
printlist(l):輸出操作。按前後順序輸出線性表l的所有元素值。
empty(l):判空操作。若l為空表,則返回true,否則返回false。
length(l):求表長。返回線性表l的長度,即l中資料元素的個數。
線性表的順序表示
順序表的定義
線性表的順序儲存又稱順序表順序表的實現一組位址連續存放的儲存單元依次存放線性表的元素,從而使得邏輯上相鄰的兩個元素在物理位置上也相鄰。即邏輯順序與物理順序相同。
陣列靜態分配
#define maxsize 50
typedef
struct
sqlist;
陣列的動態分配
#define maxsize 50
typedef
struct
sqlist;
動態分配語句
c語言中
l.data=
(elemtype*
)molloc
(sizeof
(elemtype)
*initsize)
;
c++語言中
l.data=new elemtype[initsize]
;
線性表-順序表的基本操作
插入操作
bool listinsert
(sqlist &l,
int i,elemtype e)
刪除操作
bool listdelete
(sqlist &l,
int i,elemtype &e)
按值查詢(返回第乙個相等的元素的下表 )
int
locateelem
(sqlist l, elemtype e)
線性表-鏈式表示
單鏈表
線性表的鏈式儲存又稱單鏈表定義單鏈表通過一組任意的儲存單元來儲存線性表中的資料元素
通過指標實現線性邏輯關係
typedef
struct lnodelnode,
*linklist;
單鏈表基本操作
頭插法建立
linklist list_headinsert (linklist &l)
return l;
}
尾插法建立
linklist list_tailinsert (linklist &l)
r->next=
null
;return l;
}
按序號查詢&按值查詢
按序號查詢
lnode *
getelem
(linklist l,
int i)
return p;
}
按值查詢
lnode *
locateelem
(linklist l, elemtype e)
線性表-特殊鍊錶
雙鏈表定義雙鏈表
typedef
struct dnodednode,
*dlinklist;
插入操作
s-> next =p->next;
p->next->prior=s;
s->prior =p;
p->next =s;
刪除操作
p->next=q->next;
q->next->prior =p;
free
(q);
迴圈單鏈表
判空條件
l->next==l;
迴圈雙鏈表
判空條件
l->next==l;
l->prior==l;
靜態鍊錶
定義:
#define maxsize 50
typedef
struct dnodeslinklist[maxsize]
;
順序表vs鍊錶順序表可以實現順序訪問和隨機訪問
單鏈表只能實現順序訪問
順序表 邏輯相鄰物理上也相鄰,通過相鄰表示邏輯關係
單鏈表 邏輯相鄰物理上不一定相鄰,通過指標表示邏輯關係
插入&刪除
單鏈表為o(1)(節點指標已知);o(n)(節點指標未知),但操作時只需要修改指標
順序表為o(n)且需要大量移動元素
查詢
按值查詢中單鏈表和順序表(無序)都為o(n)
按序查詢中單鏈表為o(n),順序表為o(1)
順序儲存
無論靜態分配還是非靜態分配都需要預先分配合適的記憶體空間。1. 靜態分配時預分配空間太大會造成浪費,太小會造成溢位;2. 動態分配時雖然不會溢位但是擴充需要大量移動元素,操作效率低。
鏈式儲存
在需要時分配節點空間即可,高效方便,但指標要使用額外空間線性表三個常用操作最值
順序表
int min = l[0];
int max = l[0];
for(int i = 0;i < n;i++)
鍊錶
int min = p -> next -> data;
int max = p -> next -> data;
for(;p!=null;p=p->next)
逆置
順序表
int i = 0;
int j = n-1;
while(i < j)
鍊錶
while(p->next!=r)
歸併
順序表
int i = 0,j = 0;
int k = 0;
for(;i < l1-size && j < l2-size;k++)
while(i < l1-size)
l[k++] = l1[i++];
while(j < l2-size)
l[k++] = l2[j++];
鍊錶
while(p -> next!=null&&q ->next!=null)else
}if(p->next!=null)
r -> next = p -> next;
if(q->next!=null)
r -> next = q-> next;
free(p);
free(q);
資料結構 第二章 線性表
線性表 順序儲存 鏈式儲存 順序表單鍊錶 雙鏈表迴圈鍊錶 靜態鍊錶 陣列指標實現 借助陣列實現 定義 線性表是具有相同資料型別的n n 0 個資料元素的有限序列,其中n為表長,當n 0時該線性表是乙個空表。特點 1 個數有限 2 表中元素具有邏輯上的順序性。3 表中元素都是資料元素,每個元素都是單個...
資料結構 第二章 線性表
資料結構 第二章 線性表 模板 引數化的多型 引數化多型性 講程式所處理的物件型別引數化,使一段 可用於處理多種不同型別的物件 採用模板程式設計 提供 共享機制 邏輯功能相同,資料型別不同 定義格式 template 尖括號內又稱模板形參表 返回值型別 函式名 參數列 如果變數被引數化,則返回值型別...
資料結構第二章 線性表
線性表的定義 線性表是具有相同特性的資料元素的乙個有限序列。線性表的特性 1 有窮性 乙個線性表中的元素個數是有限的。2 一致性 乙個線性表中的所有元素的性質相同。從實現的角度看,所有元素具有相同的資料型別。3 序列性 線性表的順序儲存結構 線性表的順序儲存結構簡稱為順序表。順序表的基本運算 1 初...