資料結構考研 線性表之順序表

2021-10-23 03:20:43 字數 4637 閱讀 8387

整理一下王道資料結構上有關線性表之順序表的知識和題目吧!

順序表的特點是表中的邏輯順序與其物理順序相同

線性表中元素位序是從1開始的,而陣列中元素的下標是從0開始的,所以如果題目說請刪除第i個元素,直接上是刪除 l->data[i-1]元素

順序表的優點是儲存密度大,不需要存放指標域。以及隨機訪問(也叫隨機訪問)。

順序表的缺點是插入和刪除需要移動大量的元素

定義順序表結構體

注意:typedef的用法

typedef

struct listsqllist;

void initlist(sqllist *l); //初始化順序表

void

initlist

(sqllist *l)

//初始化順序表

}

bool isempty(sqllist *l); //判斷順序表是否為空

bool isempty

(sqllist *l)

void clearlist(sqllist *l); //清空線性表

void

clearlist

(sqllist *l)

//清空線性表

getelem(sqllist *l, int i, datatype *e); //獲取第i個位置的資料

*注意: 這裡的 e ,傳入的是指標型變數,如果函式對傳入的指標發生了改變,則會用到指標

int

getelem

(sqllist *l,

int i, datatype *e)

//獲取第i個位置的資料

int locateelem(sqllist *l,datatype e); //查詢與e相等的元素

int

locateelem

(sqllist *l,datatype e)

//查詢與e相等的元素

return-1

;//沒有找到

}

bool listinsert(sqllist *l ,int i, datatype e);//在第i個位置插入元素

注意:插入第i個,即是在陣列下標i-1的地方插入,然後將下標為i-1和後面的元素全部往後挪

bool listinsert

(sqllist *l ,

int i, datatype e)

//在第i個位置插入元素

l->data[i-1]

=e; l->length++

;return true;

}

bool listdelete(sqllist *l,int i ,datatype *e);//刪除在第i個位置的元素,e獲取刪除元素

注意:從i開始,然後對前乙個進行處理,即前移

bool

listdelete

(sqllist *l,

int i ,datatype *e)

//刪除在第i個位置的元素,e獲取刪除元素

l->length--

;return

true

;}

int length(sqllist *l); //獲取線性表的長度

int

length

(sqllist *l)

//獲取線性表的長度

(1)從順序表中刪除具有最小值的元素(假設唯一),並由函式返回被刪元素的的值,空出的位置由最後乙個元素填補,若順序表為空則顯示出錯資訊並退出執行

注意:好奇怪為啥我貼上不了**。。。 一定學會這種寫法,大一的時候尋找陣列的最小值,我是令乙個數等於無窮大,然後去進行比較。。好傻,直接讓指標引數等於陣列第乙個值就可以了。 還有就是 一定要記得是 == 不是=

(2)設計乙個高效的演算法,將順序表l的所有元素逆置,要求時間複雜度為o(n),空間複雜度為o(l)

void

listreverse

(sqllist *l)

//逆置順序表,就前部分元素和後半部分元素交換,

}

#include

#include

#define maxsize 50

typedef

int datatype;

typedef

struct listsqllist;

void

initlist

(sqllist *l)

;//初始化順序表

bool isempty

(sqllist *l)

;//判斷順序表是否為空

void

clearlist

(sqllist *l)

;//清空線性表

intgetelem

(sqllist *l,

int i, datatype *e)

;//獲取第i個位置的資料

intlocateelem

(sqllist *l,datatype e)

;//查詢與e相等的元素

bool listinsert

(sqllist *l ,

int i, datatype e)

;//在第i個位置插入元素

bool listdelete

(sqllist *l,

int i ,datatype *e)

;//刪除在第i個位置的元素,e獲取刪除元素

intlength

(sqllist *l)

;//獲取線性表的長度

void

printlist

(sqllist *l)

;//遍歷順序表,列印測試結果

bool deletemin

(sqllist *l, datatype *e)

;//刪除最小值,並返回被刪元素,被刪位置由最後乙個元素代替

void

listreverse

(sqllist *l)

;//將順序表中所有元素逆置,要求時間複雜度為n,空間複雜度為1

intmain()

void

initlist

(sqllist *l)

//初始化順序表

}bool isempty

(sqllist *l)

//判斷順序表是否為空

else

return false;

}void

clearlist

(sqllist *l)

//清空線性表

intgetelem

(sqllist *l,

int i, datatype *e)

//獲取第i個位置的資料

intlocateelem

(sqllist *l,datatype e)

//查詢與e相等的元素

return-1

;//沒有找到

}bool listinsert

(sqllist *l ,

int i, datatype e)

//在第i個位置插入元素

l->data[i-1]

=e; l->length++

;return true;

}bool listdelete

(sqllist *l,

int i ,datatype *e)

//刪除在第i個位置的元素,e獲取刪除元素

l->length--

;return true;

}int

length

(sqllist *l)

//獲取線性表的長度

bool deletemin

(sqllist *l, datatype *e)

} l->data[minlocate]

=l->data[

(l->length)-1

];l->length--

;return true;

}void

listreverse

(sqllist *l)

//逆置順序表,就前部分元素和後半部分元素交換,

}void

printlist

(sqllist *l)

//遍歷順序表,列印測試結果

printf

("**********==遍歷順序表如下**********===\n");

for(

int i =

0; i < l->length; i++

)printf

("**********==共計%d個元素**********===\n"

, l->length)

;}

資料結構線性表之順序表

純手打順序表相關操作,包括順序表的建立 初始化 輸出 插入 刪除 銷毀等,僅供自己回顧使用,可能會有不對的或者不恰當的地方望大家指正,共同學習。如下 資料結構順序表 include include include define maxsize 100 using namespace std type...

資料結構 線性表之順序表

線性表是包含若干資料元素的乙個線性序列 記為 l a0,ai 1,ai,ai 1 an 1 l為表名,ai 0 i n 1 為資料元素 n為表長,n 0 時,線性表l為非空表,否則為空表。線性表l可用二元組形式描述 l d,r 即線性表l包含資料元素集合d和關係集合r d r 關係符在這裡稱為有序對...

考研資料結構 線性表

線性表是具有相同特徵資料元素的乙個有限序列。元素個數叫做線性表的長度,n n 0 表示,n 0 空表 只有乙個表頭元素,只有乙個表尾元素。表頭無前驅,表尾無後繼,除表頭和表尾外,其他元素只有乙個直接前驅,也只有乙個直接後繼。順序儲存結構 順序表 和鏈式儲存結構 鍊錶 兩種。順序表 連續儲存 順序儲存...