一、順序表
最大特點:邏輯上相鄰的兩資料元素在物理位置上也相鄰
優點:隨機訪問,訪問速度快;儲存密度大,空間利用率高
缺點:預先分配,空間大小不易估計;插入刪除操作效率低
#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 ...