数据结构顺序串的基本操作(C/C++实现)

数据结构顺序串的基本操作(C/C++实现)

注意:本代码为了测试运行默认含有操作所需数据,如有需要可自己增删改相关数据

涉及基本运算流程

  1. 建立串 s = ‘’abcdefghijklnm’'和串s1 = ‘’xyz‘’
  2. 输出串s
  3. 输出串s的长度
  4. 在串s的第9个字符位插入串s1而产生串s2
  5. 输出串s2
  6. 删除串s的第2个字符开始的5个字符而产生串s2
  7. 输出串s2
  8. 将串s的第2个字符开始的第5个字符替换成串s1而产生串s2
  9. 输出串s2
  10. 提取串s的第2个字符开始的10个字符而产生串s3
  11. 输出串s3
  12. 将串s1和串s2连接起来而产生串s4
  13. 输出串s4

GitHub地址(包含.cpp文件和可执行程序exe)

我的数据结构GitHub地址

源代码(经VS2015、devC++编译器运行通过)

#include "string.h"
#include "stdio.h"    
#include "stdlib.h"   
#include "io.h"  
#include "math.h"  
#include "time.h"

#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0

#define MAXSIZE 40 /* 存储空间初始分配量 */

typedef int Status;		/* Status是函数的类型,其值是函数结果状态代码,如OK等 */
typedef int ElemType;	/* ElemType类型根据实际情况而定,这里假设为int */

typedef char String[MAXSIZE + 1]; /*  0号单元存放串的长度 */

 /* 生成一个其值等于chars的串T */
Status StrAssign(String T, char *chars)
{
   

													/*strlen-->检测字符串长度*/
	int i;
	if (strlen(chars)>MAXSIZE)
		return ERROR;
	else
	{
   	
		/*T[0]存放串的长度*/
		T[0] = strlen(chars);


		for (i = 1; i <= T[0]; i++)
			T[i] = *(chars + i - 1);
		return OK;
	}
}

/* 由串S复制得串T */
Status StrCopy(String T, String S)
{
   
	int i;
	for (i = 0; i <= S[0]; i++)
		T[i] = S[i];
	return OK;
}

/* 若S为空串,则返回TRUE,否则返回FALSE */
Status StrEmpty(String S)
{
   
	if (S[0] == 0)
		return TRUE;
	else
		return FALSE;
}

/*  初始条件: 串S和T存在 */
/*  操作结果: 若S>T,则返回值>0;若S=T,则返回值=0;若S<T,则返回值<0 */
int StrCompare(String S, String T)
{
   
	int i;
	for (i = 1; i <= S[0] && i <= T[0]; ++i)
		if (S[i] != T[i])
			return S[i] - T[i];
	return S[0] - T[0];
}

/* 返回串的元素个数 */
int StrLength(String S)
{
   
	return S[0];
}

/* 初始条件:串S存在。操作结果:将S清为空串 */
Status ClearString(String S)
{
   
	S[0] = 0;/*  令串长为零 */
	return OK;
}

/* 用T返回S1和S2联接而成的新串。若未截断,则返回TRUE,否则FALSE */
Status Concat(String T, String S1, String S2)
{
   
	int i;
	if (S1[0] + S2[0] <=
  • 28
    点赞
  • 209
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
顺序表是一种线性表,它的存储结构是用数组来实现的。对于顺序表,我们可以进行以下基本运算: 1. 初始化:初始化一个空的顺序表。 2. 插入:在顺序表的指定位置插入一个元素。 3. 删除:删除顺序表中指定位置的元素。 4. 查找:查找顺序表中指定位置的元素。 5. 修改:修改顺序表中指定位置的元素。 下面具体介绍这些基本运算的算法实现。 1. 初始化 顺序表的初始化实际上就是创建一个数组,并将数组中的元素全部初始化为0或其他指定的值,表示这个顺序表为空。具体实现如下: ```C++ #define MAXSIZE 100 // 定义顺序表的最大长度 typedef struct { int data[MAXSIZE]; // 存储顺序表元素的数组 int length; // 当前顺序表的长度 } SqList; void InitList(SqList &L) { for (int i = 0; i < MAXSIZE; i++) { L.data[i] = 0; // 初始化为0 } L.length = 0; // 空表的长度为0 } ``` 2. 插入 在顺序表中插入一个元素,需要将该位置之后的所有元素向后移动一位,然后将新元素插入到指定位置。具体实现如下: ```C++ bool ListInsert(SqList &L, int i, int e) { if (i < 1 || i > L.length + 1) { // 判断i的范围是否合法 return false; } if (L.length == MAXSIZE) { // 判断顺序表是否已满 return false; } for (int j = L.length; j >= i; j--) { // 将指定位置之后的元素依次后移 L.data[j] = L.data[j - 1]; } L.data[i - 1] = e; // 将新元素插入到指定位置 L.length++; // 长度加1 return true; } ``` 3. 删除 在顺序表中删除一个元素,需要将该位置之后的所有元素向前移动一位,然后将最后一个元素删除。具体实现如下: ```C++ bool ListDelete(SqList &L, int i, int &e) { if (i < 1 || i > L.length) { // 判断i的范围是否合法 return false; } e = L.data[i - 1]; // 将被删除的元素赋值给e for (int j = i; j < L.length; j++) { // 将指定位置之后的元素依次前移 L.data[j - 1] = L.data[j]; } L.length--; // 长度减1 return true; } ``` 4. 查找 在顺序表中查找一个元素,只需要返回该位置上的元素即可。具体实现如下: ```C++ bool GetElem(SqList L, int i, int &e) { if (i < 1 || i > L.length) { // 判断i的范围是否合法 return false; } e = L.data[i - 1]; // 返回指定位置上的元素 return true; } ``` 5. 修改 在顺序表中修改一个元素,只需要将该位置上的元素替换成新元素即可。具体实现如下: ```C++ bool ListUpdate(SqList &L, int i, int e) { if (i < 1 || i > L.length) { // 判断i的范围是否合法 return false; } L.data[i - 1] = e; // 将指定位置上的元素替换成新元素 return true; } ``` 这样,我们就完成了顺序表的基本运算的算法实现

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值