第四章小结

Posted zasmn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第四章小结相关的知识,希望对你有一定的参考价值。

一、AI核心代码

在解决判断独立单词与词组时,虽然操作不一样,但是具体操作无非大同小异。只是在这个单词的基础上以连续接踵的词组替换罢了。

技术图片
 1  //独立的me 
 2           if(t[j]==‘m‘ && t[j+1]==‘e‘ && (j==0 || isSeparator(t[j-1])) && isSeparator(t[j+2])){
 3              cout << "you";
 4              j += 2;
 5              continue;
 6          }
 7 
 8         //独立的can you
 9         if (isCanyou(t, j)) {
10             cout << "I can";
11             j += 7;
12             continue;
13         }
14 //判断是否为独立的can you
15 bool isCanyou(char ch[],int n) {
16     if (ch[n] == ‘c‘&&ch[n + 1] == ‘a‘&&ch[n + 2] == ‘n‘&&ch[n + 3]==‘ ‘ && ch[n + 4] == ‘y‘&&ch[n + 5] == ‘o‘&&ch[n + 6] == ‘u‘) {
17         if ((n == 0 || isSeparator(ch[n - 1])) && isSeparator(ch[n + 7])) {
18             return true;
19         }
20     }
21     return false;
22 }
技术图片

而在这里用到的两样新东西同时也是学到的两点新知识:tolower和getchar

1.tolower

tolower是一种函数,功能是把字母字符转换成小写,非字母字符不做出处理。和函数int _tolower( int c )功能一样,但是_tolower在VC6.0中头文件要用ctype.h

技术图片
 1 案例:
 2 #include <iostream>
 3 #include <string>
 4 #include <cctype>
 5 using namespace std;
 6 int main()
 7 {
 8     string str= "THIS IS A STRING";
 9     for (int i=0; i <str.size(); i++)
10        str[i] = tolower(str[i]);
11     cout<<str<<endl;
12     return 0;
13 }
技术图片

2.getchar()

 

getchar()函数的作用是从计算机终端(一般为键盘)输入一个字符。getchar()函数只能接收一个字符,其函数值就是从输入设备得到的字符。

技术图片
案例:
#include <stdio.h>
  int main()
  {
  char a,b;
  a=getchar();
  b=getchar();
  putchar(a);
  putchar(b);
return 0;
}
  /*我们输入x-回车-y-回车
  结果会是xy吗?不是的 结果是a=x b=‘
‘(回车)
  当我们开始打x的时候,x在缓冲区,当我们按下回车的时候,第一个getchar()才获取到x这个值
顺利存到a里 但回车既是确定又是字符,回车‘ ‘它也跟着进了缓冲区,并且和x一起被释放,x到了程序里
回车(‘ ‘)也到了程序里,并且被第2个 getchar()获取,此时我们输入y,这时缓冲区里有一个字符 ‘y‘,
然后我们又按下回车,‘y‘和‘ ‘又一起准备被释放,由于程序里没有第3个getchar(),所以‘y‘和‘ ‘还留在缓冲区,
但它们两个已经是在准备状态中,如果程序又出现一个getchar(),‘y‘不需要你按回车它会直接进入到第3个getchar(),
getchar()是依次获取,按先后顺序,不会先获取‘ ‘,而‘ ‘正等待着马上进入第4个getchar() */
技术图片

二、稀疏矩阵压缩储存

关于三元组表和十字链表的使用:

1.三元组表

对于在实际问题中出现的大型的稀疏矩阵,若用常规分配方法在计算机中储存,将会产生大量的内存浪费,而且在访问和操作的时候也会造成大量时间上的浪费,为了解决这一问题,从而产生了多种解决方案。
由于其自身的稀疏特性,通过压缩可以大大节省稀疏矩阵的内存代价。具体操作是:将非零元素所在的行、列以及它的值构成一个三元组(i,j,v),然后再按某种规律存储这些三元组,这种方法可以节约存储空间
技术图片
 1 结构定义
 2 struct node
 3 {
 4     int i,j;  //定义三元组的行、列号
 5     int v;   //三元组的值
 6 };
 7 struct sparmatrix
 8 {
 9     int rows,cols; //稀疏矩阵的行、列数
10     int terms;   //稀疏矩阵的非零元个数
11     struct node data[maxsize]; //存放稀疏矩阵的三元组表
12 };
技术图片

2.十字链表  http://www.cnki.com.cn/Article/CJFDTOTAL-DWJS201105005.htm

十字链表继承了单链表的插入和删除操作。若

要在十字链表中插入 1 个结点,只需将该结点分别
插入其所在行的行链表以及其所在列的列链表即
可。若要在十字链表中删除 1 个结点,可将该结点
分别从其所在的行链表和列链表中分离出来,然后
删除该结点。由于行、列链表的附加头结点也均被
链接成了单链表,因此,十字链表行、列的扩充操
作也很方便。若要增加 1 行,需要首先将该行的附
加头结点插入附加列链表,然后将该行元素分别插
入十字链表即可。
综上所述,十字链表具有以下 2 个优点:
1)结构灵活,扩展性强。十字链表的插入和
删除操作十分方便、高效,并且能够灵活地扩展矩
阵的维数。
2)检索方式灵活。十字链表能够在行、列 2
个方向上检索矩阵元素,并且增加了辅助数 组,可技术图片技术图片技术图片技术图片技术图片技术图片技术图片
以直接访问矩阵的主对角元,能够从任意矩阵元素
所在结点开始检索其所在行和列的后继结点。

以上是关于第四章小结的主要内容,如果未能解决你的问题,请参考以下文章

数据结构第四章小结

第四章小结

第四章学习小结

第四章学习小结

第四章学习小结

第四章 学习小结