刪除一個元素 front=(front+1)%maxsize 添加一個元素 rear=(rear+1)%maxsize; 隊列元素個數=(front-rear+maxsize)%maxsize;
position=a[0]+(i-1)*sizeof(Elementype);
next[j]代碼 i=1,next[1]=0;j=0 while(i<T[0]){ if(j==0||T[i]==T[j]) {++i,++j,next[i]=j;} else j=next[j]; } nextval[j]代碼 i=1,nextval[1]=0;j=0 while(i<T[0]){ if(j==0||T[i]==T[j]) {++i,++j; if(T[i]!=T[j])nextval[i]=j; else nextval[i]=nextval[j]; } else j=nextval[j]; }
思路:列出T(k)的函數算法
例1數組
int fact(int n) { if(n<=1) return 1; else return n*fact(n-1); }
T(k)=1 當k=1 T(k)=1+T(k-1) 當 k≠1 則: T(n)=1+T(n-1) =1+1+T(n-2) =1+1+....+T(1) =n =O(n)
例2函數
void mergesort(int a[],int i,int j){ int m; m=(i+j)/2; if(i!=j){ mergesort(a,i,m); mergesort(a,m+1,j); merge(a,i,j,m); } }
o(nlg2n) T(k)=O(1) 當k=1 T(k)=2T(k/2)+O(k) 當 k≠1 T(N)=2T(N/2)+N=2(2T((n/4)+N/2)+N=......=2^k(T(n/2^K))+kn 當N=2^k 即k=log2 n T(N)=n+nlog2n=O(nlog2n)
按底下標優先存儲的A[9] [3] [5] [8],第一個元素地址爲100.每一個整數佔4個字節,求loc(a[1] [1]code
[1] [1])。blog
解決方案:遞歸
當第一次思考時毫無頭緒,但老師提到多維數組在計算機中其實仍是一維排列。如a[2] [2],順序爲a[0] [0],隊列
a[0][1] ,a[1][0],a[1][1].列滿了再進行,如同將一個總體分割爲兩部分a[0]、a[1],再將這兩部分分別再分割爲兩部分,即a[0]變爲a[0][0],a[0][1],a[1]變爲a[1] [0],a[1] [1]兩部分。因此A[9] [3] [5] [8]即先分9部分,每一部分再分3部分,3部分裏每一部分繼續分爲5部分這樣下去。仿照二維數組公式loc(i,j)=loc(0,0)+(n*i+j) *L,得loc(a[1] [1][1][1])=100+(1 * (3 * 5 * 8)+1 * (5 * 8)+1 * 8+ 1) *4=776。我的認爲這不須要用立體想象的方法也能快速解決,更多維的數組也可方便地計算。it