資料結構 線性表及線性表順序儲存

2021-06-27 00:41:59 字數 2567 閱讀 4125

**寫的一定程度上,要再次提公升的時候,是該好好的看一下資料結構和演算法了。趁著最近有時間,好好的複習一下,今天主要是線性表和線性表的順序儲存。

1、  線性表是一種最基本、最簡單的的資料結構,是一種線性結構。

2、  線性表中資料元素之間的關係是一對一,是n個資料元素的有限序列。

3、  若將線性表記為(a1, ……, ai-1, ai,ai+1, ……,an),則表中ai-1領先於ai,ai領先於ai+1,稱ai-1是ai的直接前驅元素,ai+1是ai的直接後繼元素。當丨=1, 2, ……, n-1時,ai有且僅有乙個直接後繼,當i=2, 3, ……, n時,ai有且僅有乙個直接前驅。

所以線性表元素的個數n (n>0)定義為線性表的長度,當n=0時,稱為空表

adt 線性表 (list)

data

operation 

void init(*l); //建立並初始化乙個空線性表,如果成功返回true,修改表傳指標  

bool isempty(l); //判斷乙個線性表是否為空,不修改表傳值  

void clear(*l);        //清空乙個線性表,成功返回true  

bool get(l,i,*e);      //從某個位置取出元素並賦值給e(i的範圍是[1,l.length]),修改e的值所以傳遞乙個指標,成功返回true 

location(l,e);       //查詢線性表中是否有e,如果有返回它的位置(從1開始),否則返回0表示失敗 

bool insert(*l,i,e);   //插入乙個元素e在第i個元素之前(i的取值範圍是[1,l.length+1]) ,成功返回true  

bool delete(*l,i,*e);  //刪除在第i個位置上的元素(i的取值範圍是[1,l.length]),刪除的元素賦給e,成功返回true 

int size(l); //返回線性表的元素個數 

endadt

#include#include#includetypedef int elemtype;

typedef struct arr;

int initarr(arr *a)

//建立順序表

arr create(arr a)

return a;

}//列印所有元素

int print(arr a)

printf("\n");

return 1;

}//插入元素

int insert(arr* a, int pos, elemtype ele)

if (pos<1 || pos>a->length + 1)

if (pos <= a->length)

} a->data[pos - 1] = ele;//插入新元素

a->length++;

printf("插入元素成功,插入位置%d,插入元素%d\n", pos, ele);

return 1;

}//判斷是否為空

int isempty(arr a)

else

}//清空表

int clear(arr *a)

//返回表的大小

int size(arr a)

//查詢指定位置元素

int get(arr a, int pos ,elemtype * e)

*e = a.data[pos - 1];

printf("查詢位置%d元素為%d\n",pos,*e);

return 1;

}//刪除指定位置元素

int deleteele(arr *a, int pos,elemtype *e)

if (pos<1 || pos>a->length)

*e = a->data[pos - 1];

if (pos < a->length-1)

} printf("刪除成功,刪除元素%d\n",*e);

a->length--;

return 1;

}int main()

執行結果如下:

1、最好的情況,如果元素要插入到最後乙個位置,或者刪除最後乙個元素, 此時時間複雜度為0(1),因為不需要移動元素的。

2、最壞的情況,如果元素要插入到第乙個位置或者刪除第乙個元素,那就意味著要移動所有的元素向後或者向前,函式要對線性表迴圈一遍操作,所以這個時間複雜度為 0(n)。

3、平均的情況,由於元素插入到第i個位置,或刪除第i個元素,需要移動n—i個元素。根據概率原理,每個位置插入或刪除元素的可能性是相同的,也就說位置靠前,移動元素多,位置靠後,移動元素少。最終平均移動次數和最中間的那個元素的移動次數相等,為(n-1)/2。因此時間複雜度為0(n)。

優點:查詢速度快,簡單、運算方便,更適合小線性表或者固定長度的線性表。

缺點:刪除和插入效率較低;儲存空間容易出現上溢;容易出現空間浪費。

線性表 線性表的順序儲存結構

線性表的順序儲存結構 線性結構是乙個資料元素的有序 次序 集。集合中必存在唯一的乙個 第一元素 集合中必存在唯一的乙個 最後元素 除最後元素外,均有唯一的後繼 除第一元素外,均有唯一的前驅。adt list 資料關係 r1 adt list 容易混的概念 引用符號 和引用型操作沒有關係 加工型操作 ...

線性表 線性表的順序儲存結構

include include using namespace std define ok 1 define error 0 define list init size 100 define listincrement 10 typedef int status typedef int elemty...

線性表 線性表的順序儲存結構

include include using namespace std define ok 1 define error 0 define list init size 100 define listincrement 10 typedef int status typedef int elemty...