• 串的堆表示


    串的堆表示

    示例代码

    下面实现了基本的五种操作函数

    #include <stdio.h>
    #include <stdlib.h>
    
    #define OK 1
    #define ERROR 0
    #define TRUE 1
    #define FALSE 0
    
    typedef int Status;
    
    typedef struct 
    {
        char * ch;
        int length;
    }HString;
    
    /* 生成一个其值等于chars的串T */
    Status StrAssign(HString *T, char * chars)
    {
        if(T->ch)
            free(T->ch);    /* 如果T不为空串 */
        int len;
        for(len=0; chars[len] != ''; len++)
            ;              /* 获取原串长度 */
        if(!len) {   
            T->ch = NULL;
            T->length = 0;
            return ERROR;
        }
        T->ch = (char *)malloc(len*sizeof(char));
        if(!T->ch) 
            return ERROR;
        T->length = len;
        for(len--; len>=0; len--)
            T->ch[len] = chars[len]; /* 复制原串 */
        return OK;
    }
    
    /* 返回串S的元素个数 */
    int StrLength(HString S)
    {
        return S.length;
    }
    
    /* 比较S,T,若S>T返回值>0 ,若S=T,返回0,若S<T,返回值<0 */
    int StrCompare(HString S, HString T)
    {
        for(int i=0; i<S.length && i<S.length; i++)
            if(S.ch[i] != T.ch[i])
                return S.ch[i] - T.ch[i];
        return S.length - T.length;
    }
    
    /* 清空字符串,并释放S所占的空间 */
    Status ClearString(HString *S)
    {
        if(S->ch) {
            free(S->ch);
            S->ch = NULL;
        }
        S->length = 0;
        return OK;
    }
    
    /* 用T返回由S1,S2拼接成的串 */
    Status Concat(HString *T, HString S1, HString S2)
    {
        if(T->ch)
            free(T->ch);    /* 释放旧空间 */
        T->ch = (char *)malloc( (S1.length + S2.length) * sizeof(char) );
        if(!T->ch)
            return ERROR;
        int i;
        for(i=0; i<S1.length; i++)
            T->ch[i] = S1.ch[i];        /* 复制串1 */
        for(int j=0; j<S2.length; j++,i++)
            T->ch[i] = S2.ch[j];        /* 复制串2 */
        T->length = i;
        return OK;
    }
    
    
    /* 打印串 */
    void PrintStr(HString T)
    {
        for(int i=0;i<T.length;i++) {
            printf("%c",T.ch[i]);
        }
        printf("
    ");
    }
    
    
    int main()
    {
        HString T,S1,S2;
        T.ch  = NULL;
        S1.ch  = NULL;
        S2.ch  = NULL;
    
        StrAssign(&S1,"BBC");
        StrAssign(&S2,"BBC");
        StrAssign(&T," I AM ROBOT");
        Concat(&T,S1,S2);
        PrintStr(S1);
        PrintStr(S2);
        PrintStr(T);
        printf("EQU %d
    ",StrCompare(S2,S1));
        ClearString(&T);
        ClearString(&S1);
        ClearString(&S2);
        return 0;
    }
    
    
  • 相关阅读:
    批量修改文件名
    查看数据库版本及当前登录用户是什么?
    安装mysql5.5时候的报错解决办法:
    mysql.sock的作用
    Linux系统编程15_C函数总结
    Linux系统编程14_信号和进程状态
    Linux系统编程13_CoreDump
    Linux系统编程12_标准库和POSIX标准头文件
    gcc使用
    http长链接短链接
  • 原文地址:https://www.cnblogs.com/wjundong/p/11628044.html
Copyright © 2020-2023  润新知