整理一下王道資料結構上有關線性表之順序表的知識和題目吧!
順序表的特點是表中的邏輯順序與其物理順序相同
線性表中元素位序是從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 空表 只有乙個表頭元素,只有乙個表尾元素。表頭無前驅,表尾無後繼,除表頭和表尾外,其他元素只有乙個直接前驅,也只有乙個直接後繼。順序儲存結構 順序表 和鏈式儲存結構 鍊錶 兩種。順序表 連續儲存 順序儲存...