目录

  • 1 第一章 绪论
  • 2 第二章 线性表
    • 2.1 单链表的案例讲解——学生信息管理系统
  • 3 第三章 栈和队列
    • 3.1 顺序栈的代码
    • 3.2 链栈的代码
    • 3.3 栈的案例源代码
    • 3.4 顺序队列的代码
    • 3.5 链队的代码
  • 4 串、数组、广义表
    • 4.1 顺序串的源代码
    • 4.2 链串的源代码
    • 4.3 串部分的课件
    • 4.4 数组部分的课件
    • 4.5 广义表的课件
  • 5 树与二叉树
    • 5.1 二叉链表法存储树代码与课件
  • 6 图
    • 6.1 图的课件
    • 6.2 图的相关源代码
  • 7 查找
    • 7.1 查找的课件
    • 7.2 查找的相关源代码
顺序串的源代码


顺序串的源代码

#include "stdio.h"
#include "stdlib.h"
#define MaxSize 100
typedef struct {
    char data[MaxSize];
    int length;
}SeqString;

void StrAssign(SeqString &s,char cstr[])
{
    int i;
    for(i=0;cstr[i]!='\0';i++)
        s.data[i]=cstr[i];
    s.data[i]='\0';
    s.length=i;
}

void StrCopy(SeqString &s,SeqString t)
{
    int i;
    s.length=t.length;
    for(i=0;i<=t.length;i++)
        s.data[i]=t.data[i];    
}
bool StrEqual(SeqString s,SeqString t)
{
    if(s.length!=t.length)
        return false;
    for(int i =0;i<s.length;i++)
        if(s.data[i]!=t.data[i])
            return false;
    return true;    
}
int StrLength(SeqString s)
{
    return s.length;
}

SeqString Concat(SeqString s,SeqString t)
{
    int i;
    SeqString str;    
    for(i=0;i<s.length;i++)
    {
        str.data[i]=s.data[i];        
    }
    for(i=0;i<=t.length;i++)
    {
        str.data[s.length+i]=t.data[i];
    }
    str.length =s.length+t.length;
    return str;
}

SeqString SubStr(SeqString s,int i,int j)
{
    int k;
    SeqString str;
    str.length=0;
    if(i<0||i>s.length||j<=0||i+j-1>s.length)
        return str;
    for(k=0;k<j;k++)
    {
        str.data[k]=s.data[i+k-1];
    }
    str.data[k]='\0';
    str.length=j;
    return str;
}

SeqString InsStr(SeqString s,int i,char cstr[])
{
    SeqString str;
    int j,k,x=0;
    str.length=0;
    if(i<0||i>s.length+1)
         return str;
    for(j=0;j<i-1;j++)
        str.data[x++]=s.data[j];
    for(k=0;cstr[k]!='\0';k++)
        str.data[x++]=cstr[k];
    for(;j<s.length;j++)
        str.data[x++]=s.data[j];
    str.length=x;
    return str;    
}
SeqString DelStr(SeqString s,int i,int j)
{
    SeqString str;
    str.length=0;
    if(i<=0||i>s.length||i+j>s.length+1)
    return str;
    for(int k=0;k<i-1;k++)
    str.data[k]=s.data[k];
    for(int k=i+j-1;k<s.length;k++)
    str.data[k-j]=s.data[k];
    str.length=s.length-j;
    return str;
}
int main()
{
    SeqString s,t,str;
    
    //测试一 :StrAssign(&s,cstr);赋值
    StrAssign(t,"work for a long time");
    printf("StrAssign测试:\n t的值赋值为:%s\n\n",t.data)    ;
    
    //测试二:StrCopy(&s,t);复制
    StrCopy(s,t);
    printf("StrCopy测试:\n s的值和t相同:%s\n\n",s.data);
    
    //测试三:StrEqual(s,t);判断是否相等    
    printf("StrEqual测试:\n 判断s的值和t的值是否相等\n ") ;
    if(StrEqual(s,t)==true)
        printf("s和t相等\n\n");
    else
        printf("s和t不相等\n\n");
    
    //测试四:StrLength(s) 求字符串的长度
    printf("StrLength测试:\n 字符串s的串长是%d\n\n",StrLength(s));
    
    //测试五: Concat(s,t) 连接字符串
    StrAssign(s,"chinese");
    StrAssign(t,"chip");
    printf("Concat测试:\n 已知字符串s=chinese,t=chip\n ");
    str=Concat(s,t);
    printf("t连接在s之后的新字符串为:%s\n\n",str.data);
    
    //测试六:SubStr(s,i,j) 从s中获取从i开始的j个字符的子串
    StrAssign(s,"work for a long time");
    printf("SubStr测试:\n 己知字符串s=work for a long time\n");
    str=SubStr(s,6,3);
    printf("获取s字符串中从第6个字符开始的3个字符是:%s\n\n",str.data);
    
    
    //测试七:InsStr(s1,i,s2)将s2中的字符串插入到s1的i位置。
    printf("InsStr测试:\n");
    printf("InsStr测试insStr(s,6,hard )后的返回值是:\n");
    printf("%s\n\n",InsStr(s,6,"hard ").data) ;
    
    //测试八:DelStr(s,i,j)将s中的字符串从i开始j个字符删除。
    StrAssign(s,"word hard!");
    printf("DelStr(s,i,j)测试:") ;
    printf("DelStr(s,4,4)后的返回值是:\n");
    printf("%s\n\n",DelStr(s,4,4).data);
    
    
}