目录

  • 1 课程资料
    • 1.1 课程标准
    • 1.2 教学日历
    • 1.3 说课课件
  • 2 第一章绪论
    • 2.1 本章教学目标
    • 2.2 数据结构简介
    • 2.3 数据结构类型
    • 2.4 算法分析
    • 2.5 本章讲义
    • 2.6 本章测验题
    • 2.7 测验
  • 3 线性结构
    • 3.1 本章教学目标
    • 3.2 线性表
    • 3.3 线性表的顺序存储及运算实现
      • 3.3.1 本节讲义
    • 3.4 线性表的链式存储和 运算实现
      • 3.4.1 本节讲义
    • 3.5 应用
    • 3.6 数组
      • 3.6.1 讲义
    • 3.7 本章测验题
    • 3.8 测验
    • 3.9 作业
  • 4 第三章栈和队列
    • 4.1 本章教学目标
    • 4.2 第一课时栈
      • 4.2.1 讲义
    • 4.3 第二课时队列
      • 4.3.1 讲义
    • 4.4 应用
      • 4.4.1 讲义
    • 4.5 本章测验题
  • 5 第四章串
    • 5.1 第一课时概念
    • 5.2 本章学习目标
    • 5.3 本章测验题
  • 6 第五章树和二叉树
    • 6.1 本章学习目标
    • 6.2 第一课时树的定义及基本术语
    • 6.3 第二课时二叉树定义性质存储
    • 6.4 第三课时二叉树遍历
    • 6.5 第四二叉排序与平衡二叉树
    • 6.6 第五树森林二叉树之间转换
    • 6.7 第六课时哈夫曼树
    • 6.8 本章测验题
    • 6.9 测验
    • 6.10 作业
  • 7 第六章图
    • 7.1 本章学习目标
    • 7.2 第一课时图的基本概念
    • 7.3 第二课时图的存储
    • 7.4 第三课时图的遍历
    • 7.5 第四课时最小生成树
    • 7.6 第五课时最短路径
    • 7.7 第六课时拓扑排序
    • 7.8 第七课时关键路程
    • 7.9 本章测验题
    • 7.10 测验
    • 7.11 作业
  • 8 第七章查找
    • 8.1 本章学习目标
    • 8.2 第一课时顺序查找二分查找
    • 8.3 第二课时哈希表
    • 8.4 本章测验题
    • 8.5 测验
    • 8.6 作业
  • 9 第八章排序
    • 9.1 本章学习目标
    • 9.2 第一课时基本概念
    • 9.3 第二课时插入选择排序
    • 9.4 第三课时交换排序
    • 9.5 第四课时归并 基排序及比较
    • 9.6 本章测验题
    • 9.7 测验
    • 9.8 作业
第一课时概念

重点:掌握串的类型定义

难点:掌握串的表示和实现

一串的定义

§ 字符串一般简称为。串(String),或称字符串是由零个多个字符组成的有限序列。一般记为:

   S = ‘a0a1…an-1 ‘ (n  0 )

§ 其中,S是串的名称,用单引号括起来的字符序列是串的值;ai (1in)可以是字母、数字或其它字符串中字符的数目n称为串的长度。零个字符的串称为空串(null string),它的长度为零。

§ 串中任意个连续的字符组成的子序列称为该串的子串。包含子串的的串相应地称为主串。通常称字符在序列中的序列号为该字符在串中的位置。子串在主串中的位置则以子串第1个字符在主串的位置来表示。

§ 串值必须用一对单引号括起来,但单引号不属于串,它的作用只是为了避免与变量或常量混淆。例如:

x = ‘123’;

其中,X是一个串变量名,赋给它的值是字符序列123,而不是整数123。之间可以进行比较。

aString=‘aString’;

左边的aString是一个串变量名,而右边的字符序列aString是赋给它的值

int Index (String S, String T, int pos) {

 // T为非空串。若主串S中第pos个字符之后存在与 T相等的子串,则返回第一个

    这样的子串在S中的位置,否则返回0

  if (pos > 0) {

    n = StrLength(S);  m = StrLength(T);  i = pos;

    while ( i <= n-m+1) {

        SubString (sub, S, i, m);

        if (StrCompare(sub,T) != 0)   ++i ;

        else return i ;

    } // while

  } // if

  return 0;          // S中不存在与T相等的子串

} // Index

4.2  串的表示和实现

一、串的定长顺序存储表示

#define  MAXSTRLEN  255

  // 用户可在255以内定义最大串长

  typedef unsigned char  Sstring

   [MAXSTRLEN + 1];

          // 0号单元存放串的长度

二、串的堆分配存储表示

typedef struct {

   char *ch;     

      // 若是非空串,则按串长分配存储区,

      //  否则chNULL

   int  length;   // 串长度

 } HString;

Status StrInsert(HString &S,int pos,HString T)

 

if(pos<1||pos>S.length+1) return ERROR;

if(T.length){

if(!S.ch=(char*)realloc(S.ch,(S.length+T.length)*sizeof(char)))

exit(OVERFLOW);

for(i=S.length-1;i>=pos-1;--i)

S.ch[i+T.length]=S.ch[i];

S.ch[pos-1….pos+T.length-2]=T.ch[0…T.length-1];

S.length+=T.length;

}

Return OK;

}

Status StrAssign(HString &T,char *chars)

{

If(T.ch) free(T.ch);

For(i=0,c=chars;*c;++i,++c);

If(!i){T.ch=NULL;T.length=0;}

Else{

If(!(T.ch=(char*)malloc(i*sizeof(char)))

Exit(OVERFLOW);

T.ch[0…i-1]=chars[0…i-1];

T.length=i;

}

return OK;

}

Int StrCompare(HString S,HString T)

{

For(i=0;i<S.length&&i>T.length;++i)

If(S.ch[i]!=T.ch[i]) return S.ch[i]-T.ch[i];

Return S.length-T.length;

}

Status ClearString(HString &S)

{

If(S.ch) {free(S.ch); S.ch=NULL;}

S.length=0;

Return OK;

}