Click here to load reader
Upload
agnes
View
138
Download
10
Embed Size (px)
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
Citation preview
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 * 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