對于線性表,我們可以對其元素進行簡單的獲取,插入以及刪除操作。
青羊網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、APP開發(fā)、成都響應式網(wǎng)站建設等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)成立于2013年到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設就選創(chuàng)新互聯(lián)。
先來講講元素的獲取操作,完整來講,就是對,將線性表L第i個位置的元素返回,若成功,則返回1,且將第i個位置的元素的值賦給*e;若失敗,則返回0。代碼如下:
int GetElem ( SqList L, int i, int *e ){ if ( i < 1 || i > L->length || L->length == 0 ) return 0; *e = L->data[i-1]; return 1; }
若是在代碼中使用宏定義則是比較好的,因為方便數(shù)據(jù)的修改,以下代碼是宏定義版:
#define Ok 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 typedef int Status; Status GetElem ( SqList L, int i, ElemType *e ){ if ( i < 1 || i > L->length || L->length == 0 ) return ERROR; *e = L->data[i-1]; return OK; }
接下來就是對元素的插入操作。在插入元素之前,我們首先要判斷插入元素的位置是否正確以及線性表的空間是否充足,若是都沒問題,那么可以執(zhí)行插入操作。記住,很重要的一點就是 ,插入一個元素后,一定要記得對線性表長度執(zhí)行加1操作。代碼如下:
int ListInsert ( SqList *L, int i, int e ){ int k; if ( i < 1 || i > L->length + 1 ) return 0; if ( L->length >= MAXSIZE ) return 0; if ( i <= L->length ) //若插入數(shù)據(jù)位置不在表尾 for ( k = L->length - 1; k >= i - 1; --k ) L->data[k+1] = L->data[k]; L->data[i-1] = e; L->length++; return 1; }
同樣的,再用宏定義的方式寫一遍代碼。代碼如下:
Status ListInsert ( SqList *L, int i, ElemType e ){ int k; if ( i < 1 || i > L->length + 1 ) return ERROR; if ( L->length >= MAXSIZE ) return ERROR; if ( i <= L->length ) for ( k = L->length - 1; k >= i - 1; --k ) L->data[k+1] = L->data[k]; L->data[i - 1] = e; L->length++; return OK; }
最后,就是對線性表進行元素的刪除操作。刪除相應位置的元素,首先就要判斷所要刪除位置是否正確,其次就是對線性表進行判斷,表長是是否為0,若為0,則刪除出錯,若不為0,則進行相應的刪除操作。代碼如下:
int ListDelete ( SqList *L, int i, int *e ){ int k; if ( i < 1 || i > L->length ) return 0; if ( L->length == 0 ) return 0; *e = L->data[i-1]; if ( i < L->length ) //如果刪除的不是最后一個位置(刪除的不是最后一個元素) for ( k = i; k < L->length; ++k ) L->data[k-1] = L->data[k]; L->length--; return 1; }
刪除元素的代碼也用宏定義的方式寫一遍。代碼如下:
Status ListDelete ( SqList *L, int i, ElemType *e ){ int k; if ( i < 1 || i > L->length ) return ERROR; if ( L->length == 0 ) return ERROR: *e = L->data[i-1]; if ( i < L->length ) for ( k = i; k < L->length; ++k ) L-data[k-1] = L-data[k]; L->length--; return OK; }
很重要的一點是,一定要分清什么是元素位置,什么是元素下標。第i個位置的元素,它的下標是(i-1)。
那么順序存儲結(jié)構(gòu)有什么優(yōu)缺點呢?它的優(yōu)點就是,存儲方式簡單,可以快速的存取表中任一位置的元素。而且,無需為其元素之間的邏輯關系而增加額外的存儲空間。
缺點就是,如果存儲元素過多,那么在執(zhí)行插入以及刪除操作時,需要移動大量的元素,這樣非常的浪費運行時間。況且,由于不知道元素的具體個數(shù),所以很難把握數(shù)組的大小,容易造成空間的浪費。