顺序字符串实现,含有批注,需debug .cpp文件,C语言

//线性表的使用及函数定义
#include<stdio.h>
#include<malloc.h>
#define _CRT_SECURE_NO_WARNINGS_
#define OK 2
#define ERROR -1
#define TRUE 1
#define FALSE 0
#define OVERFLOW -2
#define Status int//用数值返回状态,状态值如上所示。
#define ElemType char//串一半都是字符串。
#define InitSize 100
#define IncreaseSize 10 
typedef struct str
{
	ElemType* base;
	int Alllen;
	int CurLen;
}String;
Status StrAssign(String& S)
{
	S.base = (ElemType*)malloc(InitSize * sizeof(ElemType));
	S.Alllen = InitSize;
	S.CurLen = 0;
}//只是定义了一个空包,没有往里边放数值,这个得到时候去问一下老师,或者去查一下
int StrLen(String& S)
{
	return S.CurLen;
}
Status StrCopy(String& S, String T)
{
	S.base = (ElemType*)realloc(S.base, T.Alllen * sizeof(ElemType));
	if (!S.base) return OVERFLOW;
	for (int i = 0; i < T.CurLen; i++)S.base[i] = T.base[i];
	S.CurLen = T.CurLen;
	S.Alllen = T.Alllen;
	return OK;
}//将T串全部复制到S串里边。
Status StrEmpty(String& S)
{
	if (S.CurLen = 0) return TRUE;
	else return FALSE;
}//判断串是否为空,如果串是空的,返回真,反之返回假
Status max(int a, int b)
{
	if (a < b) return b;
	else return a;
}//取a,b之中更大的一项返回
int StrCamp(String S, String T)
{
	if (S.CurLen > T.CurLen) return 1;
	if (S.CurLen < T.CurLen) return -1;
	if (S.CurLen == T.CurLen)
	{
		int flag = 1;
		int i = 0;
		while (flag&&i<=max(S.CurLen,T.CurLen))
		{
			if (S.base[i] == T.base[i]) flag = flag;
			else flag = 0;
			i++;
		}
		if (i == max(S.CurLen, T.CurLen)) return 0;
		else 
		{
			if (S.base[i] > T.base[i]) return 1;
			else return -1;
		}
	}
}//比较:先比较长度,如果长度相等,判断第一个不相等字符的大小。S>T 1;S<T -1
Status ClearStr(String& S)
{
	S.CurLen = 0;
	S.Alllen = InitSize;
	free(S.base);
	S.base = (ElemType*)malloc(InitSize * sizeof(ElemType));
	if (!S.base) return OVERFLOW;
	return OK;
}//清除所有的串之中元素。这里使用的重新分配元素。
Status Strcat(String& S, String& T)
{
	if (S.Alllen < S.CurLen + T.CurLen)
	{
		S.base = (ElemType*)realloc(S.base,(S.CurLen + S.CurLen+5) * sizeof(ElemType));
		if (!S.base) return OVERFLOW;
		S.Alllen = S.CurLen + T.CurLen;
	}//如果放不下了,就重新分配
	for (int i = 0; i < T.CurLen; i++) S.base[S.CurLen + i] = T.base[i];
	S.CurLen = S.CurLen + T.CurLen;
	return OK;
}//将T链接到S之后,并且返回S。
int Index(String& S, String& T, int *pos)
{
	return *pos;
}//这个之后会专门写一篇文章,在模式识别里边。包括朴素的模式识别算法和KMP算法
Status DestoryString(String& S)
{
	free(S.base);
	return OK;
}//销毁
Status StrInsert(String& S,int i, ElemType e)
{
	if (S.CurLen == S.Alllen) {
		S.base = (ElemType*)realloc(S.base, (S.Alllen + IncreaseSize) * sizeof(ElemType));
		if (!S.base) return OVERFLOW;
		S.Alllen = S.Alllen + IncreaseSize;
	}//满串增加长度
	S.base[S.CurLen - 1] = e;
	return OK;
}
Status StrDelete(String& S, int i, ElemType* E)
{
	for (int j = i - 1; j < S.CurLen; j++) S.base[j] = S.base[j + 1];
	S.CurLen--;
	return OK;
}//删除第i的元素
int main()
{
	return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值