線性表的存儲結構有順序存儲結構和鏈式存儲結構兩種。而我們把線性表的順序存儲結構稱為順序表。順序表就是把線性表中的所有元素按照其邏輯順序,依次存儲到從指定的存儲位置開始的一塊連續的存儲空間。
(1)隨機訪問性
(2)占用連續的存儲空間
(3)存儲分配只能預先進行,即靜態分配
#define maxsize 100typedef struct Sqlist{ int data[maxsize];//存放順序表元素的數組 int length;//存放順序表的長度}Sqlist;4.順序表實現增刪查
#include<stdio.h>#define maxsize 100typedef struct Sqlist{ int data[maxsize]; int length;}Sqlist;//查找x的位置int findElem(Sqlist l,int x){ int i; for(i=0;i<l.length;i++){ if(x==l.data[i]){ return i; } } return 0;}//在p位置上插入xint insertElem(Sqlist *l,int p,int x){ int i; if(p<1 || p>l->length || l->length==maxsize-1){ return 0; } for(i=l->length;i>=p;i--){ l->data[i+1]=l->data[i]; } l->data[p]=x; ++(l->length); return 1;}//刪除p位置上的元素,將刪除的值傳遞給eint deleteElem(Sqlist *l,int p,int *e){ int i; if(p<1 || p>l->length || l->length==maxsize-1){ return 0; } *e=l->data[p]; for(i=p;i<l->length;i++){ l->data[i]=l->data[i+1]; } --(l->length); return 1;}void main(){ int i,j=0; Sqlist l={{0,1,2,3,4,5,6},7}; //int position =findElem(l,3); //PRintf("查詢3的位置為:%d/n",position); //int result=insertElem(&l,3,9); deleteElem(&l,4,&j); for(i=0;i<l.length;i++){ printf("%d/n",l.data[i]); } printf("刪除元素為:%d/n",j);}結果:查找:

插入:

刪除:

5.計算題
題目:具有n個元素的順序表,插入一個元素所進行的平均移動個數為多少?
解:
(1)求任一位置插入元素的概率
首先我們知道插入的位置是隨機的,所以每個位置插入元素的可能性都是一樣的。有n個插入位置,所以任一位置插入元素的概率為
p=1/n。
(2)求對應的每個插入位置需要移動的元素的個數
如果我們把新元素插入在表的第i個位置后,那么就需要將第i位置之后的元素向后移動一個位置。所以移動的元素個數為n-i。
所以
n
E=p∑(n-i)=(n-1)/2
1
所以插入的時間復雜度為O(n)。
新聞熱點
疑難解答