練習題目
資料結構可以從邏輯結構、物理(儲存)結構、資料運算三個角度進行理解分析。
邏輯結構包括線性結構(線性表、佇列、棧)與非線性結構(樹、圖);
物理結構包括順序儲存、鏈式儲存、索引儲存、雜湊儲存;
資料運算包括插入、刪除、修改、查詢、排序等。
由型別相同的資料元素element)組成的有序列表。
表中的元素的值與他的位置之間可以有或無聯絡,分為:
有序線性表與無序線性表。
例如:字母表、每個月的天數等。
空表:不包含任何元素的線性表。
長度:當前線性表中元素的個數。
表頭:線性表中的第乙個元素。
表尾:線性表中的最後乙個元素。
:下標從0到n-1。
除第乙個元素外,其他元素只有唯一乙個直接前驅。
除了最後乙個元素外,其他元素只有唯一乙個直接後繼。
資料元素的型別;
分配儲存空間;
資料長度;
當前位置;
表容量。
例如:
typedef
struct
elem;
elem* listarray;
int listlength;
int listcurpos;
int listsizes;
建立與清空;
獲取元素的值;
獲取線性表的長度即元素的個數;
列印;插入、刪除、末尾新增
移到上/下乙個元素
移到第乙個元素
移到最後乙個元素
移到第n個元素
順序表與鏈式表
順序表的特點:
1) 邏輯上相鄰的兩個元素物理上也相鄰,因此可以隨機訪問表中的任意元素。
2) 儲存空間位址連續,且需要預先分配。
3) 儲存空間利用率高,沒有其他結構性開銷。
4) 由於順序表的長度與規模需要預先分配,,所以如果線性表的大小未知,則不宜採用線性表。
5) 插入與刪除需要移動大量的元素。
——insert與remove的最差、平均時間複雜度是o(n)。
6) 順序表的位址計算公式有乙個規律:
adr(ai)=adr(a1)+(i-1)k;k表示每個資料元素佔k個位元組。
鏈式表見下一講。
——將線性表的元素相繼放在乙個連續位址的儲存空間中。
——可以用一維陣列描述儲存結構。
——可以對錶中的元素進行隨機訪問(訪問)。
size 最大許可長度
length 目前長度(元素個數)
curpos 當前位置
array 分配的固定長度陣列的首位址
#define bool int
bool listclear()
;bool listcreat
(int maxsize)
;bool listsetstart()
;bool listsetend()
;bool listnext()
;bool listprev()
;bool listsetpos
(int pos)
;int
listgetlength()
;bool listgetvalue
(elem* it)
;bool listinsert
(const elem* it);(
const elem* it)
;bool listremove
(elem* it)
;void
listprint()
;
具體實現方法參考教輔資料(後續將上傳源**)。
建立乙個線性表要求最大支援100個元素。
隨機產生10個數值為0-99之間的元素,依次插入順序表。
設定當前位置居中。
當前位置插入數字99
移動當前位置到下乙個元素
當前位置插入100
移動當前位置到上乙個元素
刪除當前位置的元素
末尾新增元素101
清楚順序表。
將每一步的順序表列印出來。
約瑟夫問題
資料結構(線性表)
1.試寫一演算法,在無頭結點的動態單鏈表上實現線性表操作insert l,i,b 並和在帶頭結點的動態單鏈表上實現相同操作的演算法進行比較。status insert linklist l,int i,int b 在無頭結點鍊錶l的第 i個元素之前插入元素 belse insert 2.已知線性表中...
資料結構 線性表
參考 一 線性表 順序表 單鏈表 迴圈鍊錶 雙鏈表 順序表 1.表的初始化 void initlist seqlist l 2.求表長 int listlength seqlist l 3.取表中第i個結點 datatype getnode l,i 4.查詢值為x的結點 5.插入 具體演算法描述 v...
資料結構 線性表
線性表是最基礎的一種資料結構,這樣的資料物件包含的資料元素具有一對一的前驅後繼關係。按其邏輯儲存方式的不同可分為兩類線性表 順序表和鏈式表。其中鏈式表又可分為線性鍊錶 迴圈鍊錶和雙向鍊錶。下面分別介紹下這幾種線性表的資料結構 1.順序表 typedef struct sqlist 插入演算法 i到n...