eg1:一元多項式及其運算
方法一:順序儲存結構直接表示。使用陣列下標表示指數,對應值表示係數。弊端:不適合非零項多、指數大的多項式。
方法二:順序儲存結構表示非零項。使用二維陣列儲存指數和係數。弊端:不適合多項式的運算。
方法三:鍊錶儲存非零項。
由同型別資料元素,構成有序序列的線性結構。
型別名稱:線性表(list)
資料物件集:0個及以上元素構成的有序序列。
操作集:初始化、增刪查改、返回長度、由位序返回元素等。
1、結構體
typedef struct lnode *list;
struct lnode;
struct lnode l;
list ptrl;
訪問下標為i的元素:l.data[i],ptrl->data[i]
線性表長度:l.last+1,ptrl->last+1
2、主要操作實現
(1)初始化
list makeempty()
(2)查詢
int find(elementtype x, list ptrl)
if(i>ptrl->last) return -1;
else return i;
}
(3)插入
void inserrt(elementtype x, int i, list ptrl)
if(i<1||i>ptrl->last+2)
for(j=ptrl->last;j>=i-1;j--)
}
(4)刪除
void delete(int i, list ptrl)
for(j=i;j<=ptrl->last;j++)
}
1、結構體
typedef struct lnode *list;
struct lnode;
struct lnode l;
list ptrl;
2、主要操作實現
(1)求表長
int length(list ptrl)
return j;
}
(2)按序號查詢
list findkth(int k,list ptrl)
if(i==k)else
}
(3)按值查詢
list find(elementtype x,list ptrl)
return p;
}
(3)插入
list insert(elementtype x,int i,list ptrl)
p=findkth(i-1,ptrl);
if(p==null)else
}
(4)刪除
list delete(int i,list ptrl)else
free(s);
return ptrl;
} p=findkth(i-1,ptrl);
if(p==null)else if(p->next==null)else
}
廣義表是線性表的推廣。對於線性表而已,n個元素都是基本的單元素;廣義表中,這些元素可以是單元素也可以是另乙個廣義表。結構體如下:
typedef struct gnode *glist;
struct gnodeuregion;
glist next;
};
eg:矩陣可以用二維陣列表示,但二維陣列表示有兩個缺陷:陣列的大小需要事先確定、對於「稀疏矩陣」會造成大量的空間浪費。現在才用一種典型的多重鍊錶——十字鍊錶來儲存稀疏矩陣a。
十字鍊錶只儲存非0元素、每個結點通過兩個指標域把同行同列串起來。如下圖所示:
q:為什麼說第1行和第1列的結點是同乙個?為什麼行數有5個?
資料結構 2 1線性表及其實現
線性結構是資料結構裡面最基礎最簡單的一種資料結構型別,最典型的一種叫做線性表。舉個例子 如何用程式語言來表示這樣的乙個一元多項式及其相應的操作運算呢?順序儲存結構直接表示 用乙個陣列儲存第i項的係數ai,而指數對應這個分量的下標 這樣帶來的問題是什麼呢?假如我要表示x的兩千次方,陣列的大小就需要20...
資料結構2 1 線性表及其實現
操作集 線性表 list,元素x elementtype,線性表的基本操作有 線性表的順序儲存實現 typedef struct lnode list struct lnode struct lnode l list ptrl 訪問下標為i的變數 l.data i ptrl data i 返回線性表...
(筆記)資料結構2 1 線性表及其實現 一
例 一元多項式及其運算 一元多項式 f x a 0 a1 x an 1xn 1 a nsx 主要運算 多項式相加 相減 相乘等 方法1 順序儲存結構直接表示 陣列各分量對應多項式各項 a i 項 xi的系 數ai 例如 f x 4 x5 3 x2 1 表示成 問題 表示x x2000 浪費很多記憶體...