zoukankan      html  css  js  c++  java
  • 《数据结构教程》(李春葆 主编)课后习题【练习题4】

    【4.1】 

     1 // 4.1
     2 #include <stdio.h>
     3 #define MAXSIZE 1000    //字符串最大长度
     4 int pattern_index(char t[],char s[])    //BF算法
     5 {
     6     int i,j;
     7     for(i=0;s[i];i++)
     8         if(t[0]=='?' || s[i]==t[0]){    //第一个字母匹配成功
     9             for(j=0;t[j];j++)
    10                 if(s[i+j]!=t[j] && t[j]!='?')
    11                     break;
    12             if(!t[j]) return i;
    13         }
    14     return -1;
    15 }
    16 int main()
    17 {
    18     char c,s[MAXSIZE],t[MAXSIZE];
    19     printf("请输入目标字符串:
    ");
    20     while(scanf("%[^
    ]",s)!=EOF){
    21         printf("请输入匹配字符串:
    ");
    22         //scanf("%[^
    ]",t);
    23         scanf("%s",t);
    24         scanf("%c",&c);
    25         printf("匹配位置是:
    ");
    26         printf("%d
    ",pattern_index(t,s));
    27         printf("
    ");
    28         //为下一次做准备
    29         printf("请输入目标字符串:
    ");
    30     }
    31     return 0;
    32 }

     【4.2】

     1 #include <stdio.h>
     2 #define MAXSIZE 1000
     3 /*
     4 int dp[MAXSIZE+1][MAXSIZE+1];
     5 void GetCsq(char a[],char b[],char r[])    //利用求最长公共子序列的算法,求两个子串的公共子串
     6 {
     7     int i,j,len=0,x=0,y=0,alen,blen;
     8     for(alen=0;a[alen];alen++)    //记录长度并初始化dp[][]
     9         dp[0][alen] = 0;
    10     for(blen=0;b[blen];blen++)
    11         dp[blen][0] = 0;
    12     //生成dp[][]
    13     for(i=1;i<=alen;i++)
    14         for(j=1;j<=blen;j++)
    15             if(a[i-1]==b[j-1]){
    16                 dp[i][j] = dp[i-1][j-1] + 1;
    17                 if(i>x && j>y){
    18                     r[len++] = a[i-1];
    19                     x = i,y = j;
    20                 }
    21             }
    22             else 
    23                 dp[i][j] = dp[i-1][j]>dp[i][j-1] ? dp[i-1][j] : dp[i][j-1];
    24     r[len] = '';
    25 }
    26 */
    27 
    28 void GetCsq(char a[],char b[],char r[])    //获得字符串a和b的公共子序列r
    29 {
    30     int i,j,x=0,len=0;
    31     for(i=0;a[i];i++){
    32         for(j=x;b[j];j++){
    33             if(a[i]==b[j]){    //依次比较
    34                 r[len++] = a[i];
    35                 x = j+1;
    36                 break;
    37             }
    38         }
    39     }
    40     r[len] = '';
    41 }
    42 
    43 int main()
    44 {
    45     char a[MAXSIZE],b[MAXSIZE],r[MAXSIZE];
    46     printf("请输入两个子串:
    ");
    47     while(scanf("%s%s",a,b)!=EOF){
    48         GetCsq(a,b,r);
    49         printf("其公共子串为:
    ");
    50         printf("%s
    ",r);
    51         printf("
    ");
    52         printf("请输入两个子串:
    ");
    53     }
    54     return 0;
    55 }

    【4.3】

     1 #include <stdio.h>
     2 #define MAXSIZE 1000
     3 void GetNextval(char t[],int nextval[])    //获得nextval数组
     4 {
     5     int j=0,k=-1;
     6     nextval[0] = -1;
     7     while(t[j]){
     8         if(k==-1 || t[j]==t[k]){
     9             j++,k++;
    10             if(t[j]==t[k])
    11                 nextval[j] = nextval[k];
    12             else 
    13                 nextval[j] = k;
    14         }
    15         else
    16             k = nextval[k];
    17     }
    18 }
    19 void PrintNextval(char t[],int nextval[])    //输出nextval数组
    20 {
    21     int i;
    22     for(i=0;t[i];i++)
    23         printf("	%d",i);
    24     printf("
    ");
    25     for(i=0;t[i];i++)
    26         printf("	%d",nextval[i]);
    27     printf("
    ");
    28 }
    29 int main()
    30 {
    31     char t[MAXSIZE],s[MAXSIZE];
    32     int nextval[MAXSIZE];
    33     printf("请输入模式字符串:
    ");
    34     while(scanf("%s",t)!=EOF){
    35         printf("其nextval数组为:
    ");
    36         GetNextval(t,nextval);
    37         PrintNextval(t,nextval);
    38         printf("
    ");
    39         printf("请输入模式字符串:
    ");
    40     }
    41     return 0;
    42 }

    Freecode : www.cnblogs.com/yym2013

  • 相关阅读:
    jquery跑马灯效果(ajax调取数据)
    IE6下双倍边距和关于IE6 7display:inline无效的问题
    js 利用ajax将前台数据传到后台(json格式)
    js 利用ajax将前台数据传到后台(1)
    js 点击某一块就显示某一块
    点击进行复制的JS代码
    jq利用ajax调用后台方法
    每一个程序员需要了解的10个Linux命令
    101个MySQL的调节和优化技巧
    JavaScript Math和Number对象
  • 原文地址:https://www.cnblogs.com/yym2013/p/3688501.html
Copyright © 2011-2022 走看看