zoukankan      html  css  js  c++  java
  • 串的堆表示

    串的堆表示

    示例代码

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

    #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;
    }
    
    
  • 相关阅读:
    基本數據類型
    5月28号 垃圾回收机制
    5月28 基本运算符
    5月30日 循环之while循环
    5月28号 与用户交互
    5月31日 基本数据类型(列表类型 字典类型 元组)及其内置方法
    5月30号 基本数据类型(整数型 字符串类型)及其内置方法
    變量
    5月29日 学习笔记 可变不可变类型 成员运算符和身份运算符 条件 流程控制之if判断
    关于Flash CS4字体不能加粗的问题[附解决方法]
  • 原文地址:https://www.cnblogs.com/wjundong/p/11628044.html
Copyright © 2011-2022 走看看