• 串的顺序存储结构应用


    例1 : 

    ●串比较

            • 问题: 设计实现串比较运算的算法

            如何比较串 ,我们首先制定一下规则 ,然后根据规则再设计算法

    •     ABCD 和  ACC

       先比较两个字符串的共同长度的部分,  两个串从开头进行逐个比较 , 当 第二个串第二个字符 比 第一个串的第二个字符大时, 我们就跳出, 然后说 ,  ABCD < ACC

    •    AC   和  ACA

         两个字符串共同的部分 ,都相等 ,然后我们看两个字符串的长度 ,哪个长 ,哪个就大

    跳出 , AC <  ACA

    •    ABCD 和  ABCD

     两个字符串 共同长度是 4, 然后逐个对比 ,对比完后 , 发现都相等 ,然后就比较两个字符串的长度 ,相同,就跳出 , ABCD = ABCD

    • 算法思路

            (1) 比较 s 和 t 两个串共同长度范围内的对应的字符:

                    ① 若 s 的字符 > t 的字符 , 返回 1;

                    ② 若 s 的字符 < t 的字符 , 返回 -1;

                    ③ 若 s 的字符 = t 的字符 , 则按照上述规则继续比较.

            (2) 当(1) 中 对应的字符均相同时 , 比较 s 和 t 的长度:

                    ① 两个长度相等 ,返回0;

                    ② s 的长度 >  t 的长度 , 返回 1;

                    ③ s 的长度  <  t 的长度 , 返回 -1;

     如上图 ,算法演示: 

              算法实现:

          //传入要比较的两个字符串

    1. int Strcmp(SqString s, SqString t)
    2. {

    //定义计数器 和 共同两者共同长度

    int i, comlen;

    //求 s 和 t 的共同长度 (长度相对较短的字符串的长度即为共同长度, 相等的话,包含在第二种else 了)

    1. if(s.length < t.length)
    2. {
    3. comlen = s.length;
    4. }
    5. else
    6. {
    7. comlen = t.length;
    8. }

    // 在共同长度内逐个字符比较

    1. for(i = 0; i < comlen; i++)
    2. {
    3. if(s.data[i] > t.data[i])
    4. {
    5. return 1;
    6. }
    7. else if(s.data[i] < t.data[i])
    8. {
    9. return -1;
    10. }
    11. }

    // 共同长度内对应字符均相同时 , 比较 s 和 t 的长度

    1. if(s.length == t.length)
    2. {
    3. return 0; //s == t
    4. }
    5. else if(s.length > t.length)
    6. {
    7. return 1; //s > t
    8. }
    9. else
    10. {
    11. return -1; //s < t
    12. }
    13. }

  • 相关阅读:
    CSS中display:inline 和 inline-block的区别
    排序算法总结
    使用云服务器作为跳板机器远程转发内网机器端口的jupyter服务
    宽带、带宽、流量、网速之间的区别与联系
    K8S常用kubectl命令汇总(持续更新中)
    MQTT协议快速了解
    五、资源控制器
    react简单的服务器渲染示例(含redux, redux-thunk的使用)
    树的表示——孩子兄弟表示法
    无重复字符的最长子串
  • 原文地址:https://blog.csdn.net/qq_57484399/article/details/127448684