C语言数据结构——串的链式存储

//结构体
typedef int Status;
typedef struct
{
 char *ch;
 int length;
}HString;
//以串存储一个字符数组
Status StrAssign(HString &T, char *chars)
{
 int i;
 int len = strlen(chars);
 if (!len)	//初始化
 {
  T.ch = NULL;
  T.length = 0;
 }
 else
 {
  if (!(T.ch = (char*)malloc(100 * sizeof(char))))
   exit(0);
  for (i = 0; i < len; i++)
   T.ch[i] = chars[i];
  T.length = len;
 }
 return 1;
}
//在串S的第 pos 个字符前插入串T
Status StrInsert(HString &S, int pos, HString T)
{
 if (pos<1 || pos>S.length + 1)
  return 0;
 if (T.length)
 {
  if (!(S.ch = (char *)realloc(S.ch, (S.length + T.length) * sizeof(char))))
   exit(0);
  for (int i = S.length - 1; i >= pos - 1; --i)
   S.ch[i + T.length] = S.ch[i];
  for (int i = 0; i < T.length; i++)
   S.ch[pos - 1 + i] = T.ch[i];
  S.length += T.length;
 }
 return 1;
}
//联结
Status Concat(HString &T, HString S1, HString S2)
{
 if (!(T.ch = (char *)malloc((S1.length + S2.length) * sizeof(char))))
  exit(0);
 for (int i = 0; i < S1.length; i++)
  T.ch[i] = S1.ch[i];
 for (int j = 0; j < S2.length; j++)
  T.ch[S1.length + j] = S2.ch[j];
 T.length = S1.length + S2.length;
 return 1;
}
//用 Sub 返回串 S 的第 pos 个字符起长度为 len 的子串
Status SubString(HString &Sub, HString S, int pos, int len)
{
 if (pos<1 || pos>S.length || len<0 || len>S.length - pos + 1)
  return 0;
 if (!len)
 {
  Sub.ch = NULL;
  Sub.length = 0;
 }
 else
 {
  Sub.ch = (char*)malloc(len * sizeof(char));
  for (int i = 0; i < len; i++)
   Sub.ch[i] = S.ch[pos - 1 + i];
  Sub.length = len;
 }
 return 1;
}
//主函数的实现
#include
#include
#include
int main()
{
 HString String1, String2, String3, String4;
 char char1[] = "Data";
 char char2[] = "Struction";
 StrAssign(String1, char1);
 StrAssign(String2, char2);
 Concat(String3, String1, String2);  //联结
 for (int i = 0; i < String3.length; i++)
  printf("%c", String3.ch[i]);
 printf("\n");
 StrInsert(String1, 4, String2);  //插入
 for (int i = 0; i < String1.length; i++)
  printf("%c", String1.ch[i]);
 printf("\n");
 SubString(String4, String2, 2, 5);  //取子串
 for (int i = 0; i < String4.length; i++)
  printf("%c", String4.ch[i]);
 system("pause");
 return 0;
}

你可能感兴趣的:(C语言数据结构——串的链式存储)