您的位置:首页 > 理论基础 > 数据结构算法

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

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

实现代码:

#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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: