線性表高階

2021-10-11 23:29:49 字數 3897 閱讀 2298

一、順序表

最大特點:邏輯上相鄰的兩資料元素在物理位置上也相鄰

優點:隨機訪問,訪問速度快;儲存密度大,空間利用率高

缺點:預先分配,空間大小不易估計;插入刪除操作效率低

#include

#define maxsize 1000

typedef

int elemtype;

/*elemtype型別根據實際情況而定,這裡假設為int*/

/*線性表的順序儲存的結構***/

elemtype a[maxsize]

;int n;

/*插入 o(n)*/

void

insertlist

(elemtype a,

int&n,

int i,elemtype item)

for(j = n -

1; j >= i -

1; j--

) a[i-1]

= item;

n++;}

/*刪除 o(n)*/

void

deletelist

(elemtype a,

int&n,

int i)

for(j = i; j < n; j++

) n--;}

/*查詢 o(n)*/

intlocate

(elemtype a,

int n,elemtype item)

}return-1

;}/*去重 o(n^2)*/

void

purge

(elemtype a,

int&n)}}

}/*選擇排序 o(n^2)*/

void

selectsort

(elemtype a,

int n)}if

(i != minindex)}}

intmain()

二、線性鍊錶

線性鍊錶是一種非隨機訪問的儲存結構。

#include

#include

typedef

int elemtype;

/*elemtype型別根據實際情況而定,這裡假設為int*/

/*鏈結點型別*/

typedef

struct nodelnode,

*linklist;

/*建立 o(n)*/

linklist create

(int n)

else

r = p;

/*指標變數r總是指向鍊錶末尾*/

}return list;

}/*求長度非遞迴演算法 o(n)*/

intlength

(linklist list)

return count;

}/*求長度遞迴演算法 o(n)*/

intlength1

(linklist list)

return1+

length

(list->link);}

/*測試不帶頭結點的鍊錶是否為空表 o(1)*/

intisempty

(linklist list)

/*測試帶有頭結點的鍊錶是否為空表 o(1)*/

intisempty1

(linklist list)

/*查詢 o(n)*/

linklist find

(linklist list,elemtype item)

return p;

}/*表頭插入 o(1)*/

void

insertlink1

(linklist &list,elemtype item)

/*表尾插入 o(n)*/

void

insertlink2

(linklist list,elemtype item)

r->link = p;

}/*指定結點後面插入 o(1)*/

void

insertlink3

(linklist &list,linklist q,elemtype item)

else

}/*指定位置插入 o(n)*/

intinsertlink4

(linklist list,

int i,elemtype item)

if(j != i && q ==

null

) p =

(linklist)

malloc

(sizeof

(lnode));

p->data = item;

p->link = q->link;

q->link = p;

return1;

}/*在值有序鍊錶中插入 o(n)*/

void

insertlink5

(linklist &list,elemtype item)

else

p->link = q;

r->link = p;}}

intmain()

/*已知刪除結點的前乙個結點 o(1)*/

void

deletelink1

(linklist &list,linklist r,linklist q)

else

free

(q);

}/*不知刪除結點的前乙個結點 o(n)*/

void

deletelink2

(linklist &list,linklist q)

else

if(r->link !=

null)}

free

(q);

}/*銷毀乙個線性鍊錶 o(n)*/

void

deletelist

(linklist &list)

}/*刪除線性鍊錶中資料域值為item的所有鏈結點 o(n)*/

void

deletelist

(linklist &list,elemtype item)

else}if

(list->data == item)

}/*逆轉乙個線性鍊錶 o(n)*/

void

invert

(linklist &list)

list = q;

/*鍊錶逆轉結束,此時p為null,q指向最後那個結點*/

}/*連線 o(n),與lista的結點數有關*/

void

connect

(linklist lista,linklist listb)

/*合併 o(n+m)*/

linklist mergelist

(linklist lista,linklist listb)

else

while

(p!=

null

&&q!=

null

)else

} r->link = p?p:q;

/*插入剩餘鏈結點*/

return listc;

}/*複製乙個線性鍊錶遞迴演算法 o(n)*/

linklist copy

(linklist lista)

else

return listb;

}/*利用線性鍊錶進行資料排序*/

void

linksort

(elemtype a,

int n)

p = list;

i =0;

while

(p !=

null

)}

鏈式線性表和順序線性表

在這裡插入 片 線性表的儲存結構 typedef struct seqlist typedef struct seqlist 順序表基本操作 初始化順序表在這裡插入 片 intseqlist init seqlist list,int size 插入資料元素在這裡插入 片 intseqlist in...

線性表演算法題庫 線性表習題

鍊錶。若指標p指向某結點時,能夠根據該指標找到其直接後繼,能夠順後繼指標鏈找到p結點後的結點。但是由於不知道其頭指標,所以無法訪問到p指標指向的結點的直接前趨。因此無法刪去該結點。2.雙鏈表。由於這樣的鍊錶提供雙向指標,根據p結點的前趨指標和後繼指標可以查詢到其直接前趨和直接後繼,從而可以刪除該結點...

刪除線性表節點 線性表

submit 81 solved 66 submit status web board 已知長度為n的線性表a採用順序儲存結構,請寫一時間複雜度為0 n 空間複雜度為0 1 的演算法,該演算法刪除線性表中所有值為item的資料元素。o 1 表示演算法的輔助空間為常量 輸入 n 6 輸入資料 1 2 ...