文档介绍:1 第四章串串的动态存储方式采用链式存储结构和堆存储结构两种形式//串的动态存储结构——块链存储类型定义#define CHUNKSIZE < 用户定义的结点大小>; typedef struct chunk---------- 结点结构{ char ch[CHUNKSIZE]; struct chunk *next; }chunk typedef struct { chunk *head,*tail;--------- 尾指针指示链表中的最后一个结点 int length;-------- 串的长度}//串的动态存储结构——堆结构 char store[maxsize]; typedef struct string { int length,*stadr; / *length 域指示串序列的长度 stadr 域指示串序列的 store 中的起始地址*/ };//串基本操作的实现——串的模式匹配(求子串位置) int Index_bf(strtp s,t); {/*Brute-Force 算法思想求模式串 t 在主串 s 中的定位函数*/ i=1; j=1; /* 指针初始化*/ while ((i<=)&&(j<=)) {if([i]==[j]) {i+1; j=j+1;} /* 继续比较后继字符*/ else{i=i-j+2; j=1;}; /* 指针后退重新开始匹配*/ if(j> ) return i-; else return 0; };/*Index_bf*/ //串的简单应用——统计字母出现频率 letter_Frequency(strtp text) {/* 统计给定文本 text 中每个字母出现的频率*/ char alph[]='abcdefghijklmnopqrstuvwxyz'; int freq[26]; total=0; n=len(text); 2 for(i=0;i<26;i++)freq[i]=0;/*freq 为数组*/ for(i=0;i<n;i++) {ch=SubStr(text,i,1); j=Index(alph,ch); if(j>0) {freq[j]=freq[j]+1; total=total+1; };} for(i=0;i<26;i++) {freq[i]=freq[i]/total; printf( ‘%f ’,freq[i]); } }; /*Letter_Frequency*/ 第五章数组//稀疏矩阵的三元组表示法: #define MAX 10 typedef struct {int i,j; elemtype v; }node; typedef struct {int mu,nu,tu; node data[MAX]; }mat; //稀疏矩阵的转置运算的实现 mat *zzjz(mat *a) {int ; mat *b; /* 转置后的矩阵 b*/ b=(mat *)malloc(sizeof(mat)); =; =; =; /*a,b 矩阵行、列交换*/ bn=0; for (col=1;col<=;col++) /*按a 的列序转置*/ for(am=1;am<=;am++) /* 扫描整个三元组表*/ if([am].j==col) /* 列号为 col 是转置*/ {[bn].i=[am].j; [bn].j=[am].i; [bn].v=[am].v; bn++; /* 中的结点序号加 1*/ } return b; /* 返回转置矩阵的指针*/3 }//十字链表的结点类型定义如下: typedef struct node {int i,j,v; struct node *down,*right; }szjd; //十字链表的建立表示法 szlbcreate(szjd *m[ ],szjd *n[ ],int *hs,int *ls) {int x,y,z,ms,ns; int k=0; szjd *p,*q,*s; ms=ns=0; scanf( “%d,%d ”,&ms,&ns); for(k=0;k<ms;i++) m[k]=NULL; for(;k<ns;) n[k]=NULL; *hs=ms; *ls=ns; for (; ;) {scanf(%d,%d,%d ”,&x,&y,&z); if (x==0||y==0) break; if((x>ms)||(y>ns)) contin