第五章 数组与广义表

Click here to load reader

Upload: agnes

Post on 05-Jan-2016

138 views

Category:

Documents


10 download

DESCRIPTION

第五章 数组与广义表. 5.1 数组的定义 5.2 数组的顺序表现和实现 5.3 矩阵的压缩存储 5.4 广义表的定义 5.5 广义表的存储结构 5.6 广义表的递归算法. 5.1 数组的定义. 数组: 按一定格式排列起来的一列同一属性的项目 , 是相同类型的数据元素的集合。有一维数组 A[5] 、二维数组 A[5][5] 、三维数组 A[5][5][5] 、多维数组等。 二维数组: 每一行都是一个线性表,每一个数据元素既在一个行表中,又在一个列表中。. 5.2 数组的顺序表现和实现. 二维数组以 行 为主的顺序存储 - PowerPoint PPT Presentation

TRANSCRIPT

  • 5.1 5.2 5.3 5.4 5.5 5.6

    4

  • 5.1 ,A[5]A[5][5]A[5][5][5] *

    4

  • 5.2 Loc(aij)=Loc(a11)+[(i-1)n+(j-1)]*L L=sizeof(datatype)*

    4

  • 2.

    L=sizeof(datatype)*

    4

  • *Loc(aij)=Loc(a11)+[(i-1)n+(j-1)]*LLoc(aij)=Loc(a11)+[(j-1)m+(i-1)]*L

    4

  • 5.3 AN*N 1. 2. 3.*

    4

  • n(n1)/2BA*

    4

  • n(n1)/2BA*

    4

  • *

    4

  • 2.*

    4

  • 3.*

    4

  • 3n2B*

    4

  • *

    4

  • 4.*

    4

  • *

    4

  • (1)i(2)j(3)V ijV*

    4

  • 133181319457576642663735*

    4

  • 788133181319457576642663735*

    4

  • *

    4

  • POS(k)Ak BNUM(k)Ak POS(1)2 POS(k)POS(k1)NUM(k1) 2km*

    4

  • POSNUMABPOSNUMPROCEDURE POSNUM(BPOSNUM)tB(13) []mB(11) []FOR k1 TO m DO NUM(k)0 [NUM]FOR k2 TO t1 DO NUM(B(k,1))NUM(B(k,1))1[NUM]POS(1)2FOR k2 TO m DO POS(k)POS(k1)NUM(k1) [POS]RETURN*

    4

  • *

    4

  • *

    4

  • ADPROCEDURE TRAN(AD)kA(02) [B]tA(03) []D(01)k D(02)A(01) D(03)A(03) []IF (t0) RETURNkk1*

    4

  • struct ab { int i int j ET v}tran(ad)struct ab *a *d{ int ktkkmn ka[0].j t(int)(a[0].v) d[0].ik d[0].ja[0].i d[0].va[0].v if (t0) return kk1 for (m1/0 m=k/k-1 m) for (n1 nt n) { if (a[n].jm) { d[kk].ia[n].j d[kk].ja[n].i d[kk].va[n].v kkkk1 } } return }*

    4

  • *

    4

  • (1) (2)0 row0col0(3) val H H*

    4

  • *

    4

  • *

    4

  • *#include struct node { int row, col, val; struct node * right, * down};typedef struct node NODE;NODE * a, * b, * c;

    NODE * create_null_mat(m,n)int m, n; { NODE *h, * p, * q; int k; h = (NODE*)malloc (sizeof(NODE) ); h->row =m; h->col= n;h->val=0; h->right=h; h->down=h; p=h;

    for (k=0; kcol=1000;q->right=q;q->down=p->down;p->down=q; P=q; }p=h;for (k=0;krow=1000 ; q->down=q; q->right=p->right ; p->right=q; p=q; } return(h); }

    4

  • * NODE * search_row_last( a , i) NODE *a ; int i; { NODE *p, *h; int k; p = a ; for (k=0; kdown; h=p; while (p->right!=h) p = p->right; return (p); }

    4

  • *NODE *search_col_last(a,j)NODE * a ; int j;{ NODE * p, * h;int k:p = a;for (k=0; kright;h=p;while (p->down !=h) p=p->down;return (p); }

    4

  • *void insert_node(a,row,col,value). NODE * a; int row, col, value;{ NODE * p, * q, * r; p =search_row_last (a, row ); q =search_col_last(a,col); r= (NODE * )malloc(sizeof(NODE)); r->row=row; r->col=col; r->val=value; r->right=p->right ; p->right=r; r->down=q->down; q->down=r; a->val++; }

    4

  • *NODE *create_mat(){ int m, n, t, i, j, k, v ;NODE * h;printf (" Input 3 --tuples: \n" ) ;printf(" % 3d: ", 0);scanf(" %d, %d, %d", &m,&n,&t);h=create_null_mat(m,n);for (k=1; k
  • *NODE * mat_add(a,b)NODE * a, * b;{ NODE *c, *p, *q, *u, *v;c = create_null_mat (a->row, a->col);p = a->down; u =b->down;while (p!=a){ q = p->right; v=u->right;while (q != p || v != u){ if ( q->col = = v->col) { if (q->val + v->val != 0) insert_node (c,q->row, q->col, q->val+v->val ); q=q->right ; v=v->right; }

    else if (q->colcol ) { insert_node (c, q->row, q->col, q->val ); q=q->right; } else { insert_node(c, v->row, v->col, v->val ); v=v->right; } } p=p->down; u = u->down;} } return (c ); }

    4

  • *NODE * mat_add(a,b)NODE * a, * b;{ NODE *c, *p, *q, *u, *v;c = create_null_mat (a->row, a->col);p=a->down; u =b->down;while (p!=a){ q=p->right; v=u->right;while (q!=p||v!=u){ if (q->col==v->col) { if (q->val+v->val!=0) insert_node (c,q->row,q->col, q->val+v->val); q=q->right ; v=v->right; }

    elseif (q->colcol ) { insert_node (c, q->row, q->col, q->val ); q=q->right; }else { insert_node(c, v->row, v->col, v->val ); v=v->right; }}P=p->down; u = u->down;}return (c );}

    4

  • n, n = 0 n > 0d1(head) (d2, d3, , dn)(tail ): n ( n 0 ) A = (d1, d2, d3, , dn)Adi(), ()5.4 *

    4

  • E = ( a, E )D = (( ), ( e ), ( a, ( b, c, d ) ) )E = (a, ( a, ( a, ) ) )A = ( )B = ( e )C = ( a, ( b, c, d ) )D = (A , B, C ) () 1123A()A(()) 01()*

    4

  • 5.5 typedef struct GLNode{ int tag; union { DataType data; struct GLNode *dlink; }dd; struct GLNode *linkp;}GList;*

    4

  • *

    4

  • tphp*

    4

  • 5.6 #include struct node { int tag; union { struct node *dlink; char data; } dd; struct node *link; };typedef struct node NODE;

    *

    4

  • NODE *copy(p) NODE * p; { NODE *q; if (P==NULL) return(NULL); q=(NODE * )malloc (sizeof(NODE)); q->tag = p->tag; if (p->tag) q->dd.dlink=copy(p->dd.dlink); else q->dd.data=p->dd.data; q->link=copy(p->link); return(q); }

    *

    4

  • int equal(s,t) NODE *s, *t; { int x; if (s==NULL&& t==NULL) return(1); if (s!=NULL && t!=NULL) if (s->tag==t->tag) { if (!s->tag) if (s->dd.data==t->dd.data) x=1; else x=0; else x=equal(s->dd.dlink, t->dd.dlink); if (x) return(equal(s->link,t->link)); } return(0); }

    *

    4

  • 1. 2. 34f(n)=n!45 g(m,n)= 0 (m=0,n>=0)g(m,n)=g(m-1,2n)+n (m>0,n>=0)g(5,2) 6*

    4

  • 7|pre,data,next,datanextprenull) ,8Aa0 ,a1,a2,.am-1 B=(b0,b1,bn-1) A,B, (A=(x,y,y,z,x,z), B=(x,y,y,z,y,x,x,z) x,y,y,z,A=(x,z)B=(y,x,x,z),) A=B=A=B, A=,BAB,ABA B9*

    4