数据结构之线性表的顺序存储结构(数组)的插入与删除

本文详细探讨了数据结构中线性表的顺序存储结构——数组,在C语言环境下如何进行插入和删除操作。通过代码实例,展示了具体的操作过程和注意事项,帮助读者理解线性表动态管理的基本原理。
摘要由CSDN通过智能技术生成

线性表的顺序存数结构:指的是用一段地址连续的存储单元一次存储线性表的数据元素
     在内存中找块内存,把相同数据类型的数据元素一次存放在这块空间中。可以用以为数组来实现顺序存储结构。数组的长度是存放线性表的存储空间的长度,线性表的长度是数据元素实际的个数。线性表的长度应该限于等于数组的长度
      优点:无需为表中元素之间的逻辑关系而增加额外的存储空间;可以快速的存取表中任一位置的元素
     缺点:插入和删除操作需要移动大量元素;当线性表长度变化较大时,难以确定存储空间的容量;造成存储空间的碎片

实现代码:

#include<stdio.h>
#define size 50


int getLength(char *string){//获取字符串长度
	int i = 0;
	while(string[i] != '\0' ){
		i++;
	}

	return i+1;
}

int insert(char * string , int i , char newChar,int *length){//在字符串 string 指定位置 i 插入新字符newChar,更改字符串长度 length
	int j = *length;
	if( i <= 0 || i > *length){//指定位置不合法
		return 0;	
	}
	if( i < *length){ //指定位置在字符串中间,从末尾开始至指定位置的字符全部往后移一位
		for(; j >= i ; j--){
			string[j] = string[j-1];
		}
		string[j] = newChar;//指定位置更换成新字符
	}
	*length += 1;//字符串长度增加1
	return 1;
}


int deleteCh(char *string , int i, char *deleteChar,int *length){//删除字符串string 位置 i上的字符,deleteChar记录删除字符,更改字符串的长度length
	int j ;
	char status[10];
	char *p = status;
	if(i <= 0 || i > *length){// 位置i不合法
		return 0;
	}

	if(i < *length){//位置在字符串中间
		*deleteChar = string[i-1];//deleteChar记录删除字符
		for( j = i-1 ; j < *length ; j++ ){//从删除字符位置i开始的后面所有字符往前移一位
			string[j] = string[j+1];
		}
		string[j] = '\0';//设置末尾字符为结束字符
	}
	*length -=1;//字符串长度减1
	return 1;
}





void main(){
	char array[size];
	char *string = array;//字符串

	int length ;//记录字符串的长度
	char deleteChar;//记录被删除的字符
	int insertPosition;//插入的位置
	int deletePosition;//删除的位置

	printf("please input a string:");
	scanf("%s",string);//输入一串字符
	printf("\n");
	
	length = getLength(string);//返回字符串的长度
	printf("%d\n",length);

	printf("请输入插入位置:");//输入插入的位置
	scanf("%d",&insertPosition);

	insert(string,insertPosition,'A',&length);//在string字符串中的insertPosition位置上插入字符A
	printf("%s\n",string);

	printf("请输入删除的位置:");
	scanf("%d",&deletePosition);//输入删除位置
	deleteCh(string,deletePosition,&deleteChar,&length);
	printf("%s\t删除的字符为:%c\n",string,deleteChar);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值