数据结构 第 5 章 数组和广义表

Download 数据结构 第 5 章  数组和广义表

If you can't read please download the document

Upload: chantrea-nhek

Post on 13-Mar-2016

71 views

Category:

Documents


11 download

DESCRIPTION

数据结构 第 5 章 数组和广义表. 什么是数组和广义表?? 数组和广义表的存储结构. 数组和广义表可看成是一种特殊的线性表,其特殊在于,表中的数据元素本身也是一种线性表。. 数组. 数组:是所有高级编程语言中都已实现的固有数据类型。但它和其它诸如整数、实数等原子类型不同,它是一种结构类型。换句话说, " 数组 " 是一种数据结构。 一维数组 A[n1] :定长的线性表 二维数组 A[n1][n2] :每个数据元素也是一个定长的线性表的线性表。 - PowerPoint PPT Presentation

TRANSCRIPT

  • 5

  • ""A[n1]A[n1][n2]

    Am[X0X1 Xm-1]TXi=( ai0, ai1, .,ain-1) 0im-1An[y0, y1, ,yn-1] yi=(a0i, a1i, ..,am-1i)0in-1

    a00 a01 a0n-1

    a10 a11 a1n-1

    .

    A=

    am-1 0 am-1 1 am-1 n-1

  • ADT Array{: D={aj1j2..jn|n>=0, jiiaj1j2...jn (-ElemSet} : R={R1,R2,...Rn} Ri={|0
  • "()()""()()"

  • ()()i+1i Am*n()() a00,a01,,a0n-1,a10,a11,a1n-1,,am-10,am-11,,am-1n-1 nPASCALC()()

    ()()j+1j Am*n()()a00,a10,,am-10,a01,a11,am-11,,a0n-1,a1n-1,,am-1n-1nFORT0RAN

  • LAmnaij()() LOC(aij)=LOC(a00)+(in+j)L()() LOC(aij)=LOC(a00)+(jm+i)L()()Ab1b2b3aj1j2j3 LOC(aj1j2j3)=LOC(a000)+(j1b2b3+j2b3+j3)LNAb1b2bnaj1j2jn LOC(aij)= LOC(a000)+(j1b2bn+j2b3bn++jn-1 bn +jn)L

  • nA aij=aji 0i,jn-1A

  • ii+1n(n+1)/2.sa[0..n(n+1)/2-1]Aaijsa[k]ijaijaiji0i-11+2++i=i(i+1)/2iaijj k=i*(i+1)/2+ji

  • c

    c

  • 0n-1233n-2sasasa[k]aijaiji,3*i-1ij-i+1aij LOC(i,j)=LOC(0,0)+[3*i-1+(j-i+1)]*L=LOC(0,0)+(2i+j)*L

  • Asss0.5mnA

  • i,j)(i,j,aij)A((1,2,12)(1,3,9),(3,1,- 3),(3,6,14),(4,3,24), (5,2,18),(6,1,15),(6,4,-7))(6,7)M

  • #define maxsize 12500 typedef struct{ int i,j; datatype v; }triple;

    typedef struct{ triple data[maxsize + 1];//data[0] int m,n,t; //t }tripletable;

  • (i,j)i,i

  • mnABnma[i][j]=b[j][i]0i

  • ABa.dataBb.dataAcol(0coln-1)a.datacolb.dataBStatus TransposeSMatrix(TSMatrix M, TSMatrix &T) {T.mu = M.nu; T.nu = M.mu; T.tu = M.tu; if (T.tu) { q = 1; for (col=1; col
  • for(row=0;row
  • a.databAcolBb.datacpot[col]0col
  • Status FastTransposeSMatrix(TSMatrix M, TSMatrix &T) {T.mu = M.nu; T.nu = M.mu; T.tu = M.tu; if (T.tu) { for (col=1; col
  • icpot[col]#define MAXRC 100 typedef struct{ Triple data[MAXSIZE +1]; int rpos[MAXRC +1];// int mu,nu,tu; }RLSMATRIX

  • Q=M*NMm1*n1Nm2*n2n1=m2 for(i=1;i
  • Status MultSMatrix(RLSMatrix M, RLSMatrix N, RLSMatrix &Q) { if (M.nu != N.mu) return ERROR; Q.mu = M.mu; Q.nu = N.nu; Q.tu = 0; // Q if (M.tu*N.tu != 0) { // Q for (arow=1; arow
  • ctempO(M.mu*N.nu)QO(M.tu*N.tu/N.mu)N.tu/N.muNQ O(M.mu*N.nu)O(M.mu*N.nu)+O(M.tu*N.tu/N.mu)+O(M.mu*N.nu)= O(M.mu*N.nu+M.tu*N.tu/N.mu) M m n N n p M M.tu = qmmnN N.tu = qnnpO(mp(1+nqmqn)) qm
  • i,j,vrightdownrightdownij

  • typedef struct OLNode{ int i,j; ElemType e; struct OLNode *right *down; }OLNode; *OLink

    typedef struct{ OLink *rhead, *chead;int mu,nu,tu; }CrossList;

  • Status CreateSMatrix_OL (CrossList &M) {if(M) free(M);scanf(&m,&n,&t); M.mu=m; M.nu=n; M.tu=t; if (!(M.rhead = (OLink *)malloc((m+1)*sizeof(OLink)))) return ERROR; if (!(M.chead = (OLink *)malloc((n+1)*sizeof(OLink)))) return ERROR; for(int a=1;ae=e; // if (M.rhead[i] == NULL || M.rhead[i]->j > j) { p->right = M.rhead[i]; M.rhead[i]= p; } else { // for (q=M.rhead[i]; (q->right) && (q->right->jright); p->right = q->right; q ->right = p; } // if (M.chead[j] == NULL || M.chead[j]->i > i) { p->down = M.chead[j]; M.chead[j]= p; } else { // for ( q=M.chead[j]; (q->down) && q->down->i down ); p->down = q->down; q->down = p; } // } // for return OK;} // CreateSMatrix_OL O(t*max(m,n))

  • (A=A+B)ABBA1aij+bij e2aijbij=03bijaij=0;e4)0ABpapbAB41pa->j==pb->j pa->e+pb->e0aij+bijpa2pa->jjpa->j0pa3pa->j>pb->jpa->j=0Apb4pa->j==pb->jpa->e+pb->e=0,Aparptrcptr

  • preApahlA

  • A=A+B(1)papbAB pa=A.rhead[1]; pb=B.rhead[1]; pre = NULL;hl for(i = 1; i j>pb->j(pb->e == 0) (A),Apbp: Aif(pre == NULL) A.rhead[p->i] = p;else pre->right = p;p->right = pa; pre = p;Ahl[p->j]hl[p->j]p:ifA.chead[p->j] || A.chead[p->i]>p->i{p->down = A.chead[p->j]; A.chead[p->j] = p;}else{ p->down = hl[p->j]->down; hl[p->j]->down = p;}hl[p->j] = p;pa!=NULL&&pa->jj,papre = pa; pa = pa->right;pa->j == pb->jpa->e + pb->e != 0,BApa->e += pb->epa->e + pb->e == 0,Aif(pre == NULL) A.rhead[pa->i] = pa->right;else{pre->right = pa->right;}p = pa; pa = pa->right; hl[p->j]hl[p->j]if(A.chead[p->j] == p) A.chead[p->j] = hl[p->j] = p->down;else{hl[p->j]->down = p->down;}free(p)(3)papb

  • ListsL = (a, L)LS=a1,a2,a3,,an)LSnLS a1LShead,a2,a3,,an)LStail

  • 1A=( )A02B=(e)B13C=(a,b,c,d)C2ab,c,d4D=(A,B,C)D3,D=((),e, (a,b,c,d))5E=(a,E)2E=(a,(a,(a,)))

    01