線性表及其實現

2021-09-26 13:52:20 字數 3431 閱讀 9719

類項名稱:線性表(list)

資料物件集:n個元素的構成的有序序列(n=>0)

操作集:l ∈ list,x ∈ elementtype,整線性表的基本操作主要有:(如下)

/* 線性表的基本操作*/

list makeempty();//初始化乙個空的線性表

elementtype findkth

(int k

,list l);

//返回位序k處的元素

int find(elementtype x,list l);

void insert(elementtype x

,int i,list l);

//在位序i前插入新元素x

void

delete

(int i,list l);

//刪除指定位序i的元素

int length

(list l);

//返回線性表l的長度n

插入元素時,必須從最後乙個元素開始往後移,逐步騰出存放插入元素的空間。若從裡至外往後移,即

for(j=i-1;j<=ptrl->last;j++)

ptrl->data[j+1] = ptrl->data[j];

則會導致data[i-1]到data[ptrl->last+1]都是同乙個元素,即data[i-1]。

順序儲存為利用陣列的連續空間順序存放線性表的各元素, 注意鍊錶元素起始點和末點的下標,還有指標last指示最後乙個元素。

typedef struct lnode*list;

struct lnode

;struct lnode l

;list ptrl;

//線性表結構的指標

線性表長度:l.last+1 或 ptrl->last+1

訪問下標為i的元素:l.data[i] 或ptrl->data[i]

**如下:

/*初始化*/

list makeempty()

/*查詢 */

int find

(elementtype x

,list ptrl)

/*平均比較次數為(n+1)/2,平均時間效能為o(n)*/

/*插入第i(1≤i≤n+1)個元素*/

void

insert

(elementtype x

,int i,list ptrl)

if(i<

1||i>ptrl-

>last+2)

for(j=ptrl-

>last;j>=i-

1;j--

) ptrl-

>data[j+1]

= ptrl-

>data[j]

;//從最後乙個元素開始,將ai~an倒序向後移動

ptrl-

>data[i-1]

=x;//新元素插入

ptrl-

>last++

;//last仍指向最後元素

return;}

/*平均移動次數為n/2,平均時間效能為o(n)*/

/*刪除第i(1≤i≤n)個元素*/

void

delete

(int i,list ptrl)

for(j=i;j<=ptrl-

>last;j++

) ptrl-

>data[j-1]

= ptrl-

>data[j]

;// 將a(i+1)~a(n)順序向前移動

ptrl-

>last--

;//last仍指向最後元素

return;}

/*平均移動次數為(n-1)/2,平均時間效能為o(n)*/

不需要邏輯上相鄰的兩元素物理上也相連,插入、刪除時不需要移動資料元素,只需要修改鏈。

要在鏈式儲存上插入新元素,首先構造新元素s,再將p的next指標指向s,s的next指標則指向先前p的下乙個元素。兩個順序不可調換。

**如下:

/*求表長*/

int length

(list ptrl)

return j;

}/*查詢1:按序號查詢:findkth*/

list findkth

(int k

,list ptrl)

if(i==k)

return p;

//找到第k個元素,返回指標

else

return

null

;//否則為空

}/*查詢2:按值查詢,find*/

list find

(elementtype x

,list ptrl)

/*插入(在第i-1個節點後插入新元素,1≤i≤n+1)*/

list insert

(elementtype x

,int i,list ptrl)

p=findkth

(i-1

,ptr)

;//查詢第i-1個節點if(

p==null

)else

}/*刪除*/

list delete

(int i,list ptrl)

p=findkth

(i-1

,ptrl);if

(p==null

)else

if(p-

>next==

null

)else

}

MOOC 2 1 線性表及其實現

1.順序表 include typedef struct lnode list struct lnode struct lnode l list ptrl 1.初始化 建立空的順序表 list makeempty 2.查詢 int find elementtype x,list ptrl 3.插入 ...

資料結構 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 返回線性表...