[例] 一元多項式及其運算
一元多項式 :
主要運算:多項式相加、相減、相乘等
【分析】如何表示多項式?
多項式的關鍵資料:
多項式項數n
各項係數ai 及指數 i
方法1:順序儲存結構直接表示
陣列各分量對應多項式各項: a[i]: 項xi的係數ai
方法2:順序儲存結構表示非零項
按指數大小有序儲存!
相加過程:從頭開始,比較兩個多項式當前對應項的指數
方法3:鍊錶結構儲存非零項
多項式表示問題的啟示:
1. 同乙個問題可以有不同的表示(儲存)方法
2. 有一類共性問題:有序線性序列的組織和管理
線性表(linear list) : 由同型別資料元素構成有序序列的線性結構
1.表中元素個數稱為線性表的長度
2.線性表沒有元素時,稱為空表
3.表起始位置稱表頭,表結束位置稱表尾
型別名稱:線性表(list)
資料物件集:線性表是 n (≥0)個元素構成的有序序列( a1, a2,… ,an )
操作集:線性表l屬於 list,整數i表示位置,元素x 屬於 elementtype, 線性表基本操作主要有:
利用陣列的連續儲存空間順序存放線性表的各元素
主要操作的實現
typedef
int position;
typedef
struct lnode *list;
struct lnode ;
/* 初始化 */
list makeempty()
/* 查詢 */
#define error -1
position find( list l, elementtype x )
/* 插入 */
/*注意:這裡p是儲存下標位置(從0開始)*/
bool insert( list l, elementtype x, position p )
if ( p<0 || p>l->last+1 )
for( i=l->last; i>=p; i-- )
l->data[i+1] = l->data[i]; /* 將位置p及以後的元素順序向後移動 */
l->data[p] = x; /* 新元素插入 */
l->last++; /* last仍指向最後元素 */
return
true;
} /* 刪除 */
/*注意:這裡p是儲存下標位置(從0開始)/
bool delete( list l, position p )
for( i=p+1; i<=l->last; i++ )
l->data[i-1] = l->data[i]; /* 將位置p+1及以後的元素順序向前移動 */
l->last--; /* last仍指向最後元素 */
return
true;
}
不要求邏輯上相鄰的兩個元素物理上也相鄰;通過「鏈」建 立起資料元素之間的邏輯關係。
插入、刪除不需要移動資料元素,只需要修改「鏈」。
訪問序號為 i 的元素? 求線性表的長度?
int length ( list ptrl )
return j;
}
typedef struct lnode *ptrtolnode;
struct lnode ;
typedef ptrtolnode position;
typedef ptrtolnode list;
/* 查詢 */
#define error null
position find( list l, elementtype x )
/* 帶頭結點的插入 */
/*注意:這裡p是鍊錶結點指標,在p之前插入新結點 */
bool insert( list l, elementtype x, position p )
else
}/* 帶頭結點的刪除 */
bool delete( list l, position p )
else
}
廣義表(generalized list)廣義表是線性表的推廣
對於線性表而言, n個元素都是基本的單元素;
廣義表中,這些元素不僅可以是單元素也可以是另乙個廣義表
多重鍊錶:
鍊錶中的節點可能同時隸屬於多個鏈
多重鍊錶中結點的指標域會有多個,如前面例子包含了next和 sublist兩個指標域;但包含兩個指標域的鍊錶並不一定是多重鍊錶,比如在雙向鍊錶 不是多重鍊錶。
多重鍊錶有廣泛的用途: 基本上如樹、圖這樣相對 複雜的資料結構都可以採 用多重鍊錶方式實現儲存。
矩陣可以用二維陣列表示,但二維陣列表示有兩個缺陷:
陣列的大小需要事先確定,對於「稀疏矩陣 」,將造成大量的儲存空間浪費
採用一種典型的多重鍊錶——十字鍊錶來儲存稀疏矩陣
只儲存矩陣非0元素項結點的資料域:行座標row、列座標col、數值value
每個結點通過兩個指標域,把同行、同列串起來;
行指標(或稱為向右指標)right
列指標(或稱為向下指標)down
用乙個標識域tag來區分頭結點和非0元素結點:
頭節點的標識值為「head」,矩陣非0元素結點的標識值為「term」。
線性表總結
順序表是將表中的結點依次存放在計算機記憶體中一組位址連續的儲存單元中。將表中元素乙個接乙個的存入一組連續的儲存單元中,這種儲存結構是順序結構。二 單向鍊錶 單向鍊錶 單鏈表 是鍊錶的一種,其特點是鍊錶的鏈結方向是單向的,對鍊錶的訪問要通過順序讀取從頭部開始。三 迴圈鍊錶 它和單鏈表的差別僅在於,判別...
線性表總結
1 線性表的主要內容 線性表的邏輯結構 線性表的順序結構 線性表的鏈式儲存 順序表和單鏈表的比較 2 線性表的定義 零個或多個具有相同型別的資料元素的有限序列。元素的個數就是表的長度。長度為0就是空表。順序儲存結構及實現 用一段連續的位址來儲存資料。每個元素在儲存空間的相鄰關係和物理相鄰關係相同,可...
線性表知識總結
線性表順序儲存結構 const int maxsize n template class seqlist public seqlist seqlist datatype a,int n seqlist int length datatype get int u int locate datatype...