栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

数据结构-顺序表操作

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据结构-顺序表操作

1、插入操作:

        (1)判断插入的位置是否合理。

                ①不能大于所有元素再加1的值,否则按一次插入一个元素来讲,多出两个空位是不合理的。防止上溢出。

                ②不能插入小于1的值,防止下溢出。

        (2)给新插入的元素分配空间。

                ①这里使用realloc()函数用来给动态数组额外申请更多的物理空间。

                size+1:把顺序表的实际容量增加一个单位。

        (3)进行插入操作时,要目标位置开始的元素依次向后移动,最后将目标位置腾出,把元素放入其中。

                length++:是顺序表中存放的数据加一。

//向数据表中插入元素
table insertTable(table t,int elem,int pos)//t:顺序表结构体、elem:要插入的元素 pos:插入的位置 
{
	//1、检测插入位置是否合理:如果大于长度+1或者小于1则不合理
	if(pos>t.length+1||pos<1)
	{
		printf("插入位置有问题n");
		return t;	
	}	
	//2、插入操作前,先检查顺序表中是否有空余位置,如果没有动态分配一个位置
	if(t.length>=t.size)//逻辑表长==实际空间大小
	{
		t.head=(int*)realloc(t.head,(t.size+1)*sizeof(int));
		if(!t.head)
		{
			printf("存储分配失败。n");
			return t;	
		}	
		//分配成功,实际大小加一
		t.size+=1; 
	} 
	//3、插入操作,从插入位置开始的后续元素逐个后移
	for(int i=t.length-1;i>=pos-1;i--)
	{
		t.head[i+1]=t.head[i];	
	} 
	//4、向腾出的位置中插入目标元素
	t.head[pos-1]=elem;
	//5、逻辑表长+1
	t.length++;
	
	return t; 
} 

2、删除操作: 

        (1)判断删除元素的位置是否正确。

                        ①不能大于所有元素的实际个数,否则没有意义。

                        ②不能小于1,否则无意义。       

(2)进行删除操作,从目标元素开始,将它后面的元素依次向前一个元素进行覆盖。

table delTable(table t,int pos)
{
	//1、判断删除位置是否有误 
	if(pos>t.length||pos<1)
	{
		printf("被删除元素的位置有误n");
		return t;		
	}
	
	//2、删除操作
	for(int i=pos;i 

3、查找操作:

        (1)从顺序表的第一个元素开始进行顺序查找。

//顺序表查找操作
int selectTable(table t,int elem)
{
	for(int i=0;i 

4、修改操作:

        (1)可以通过函数嵌套,用查找函数找到目标位置,然后通过数组下标进行赋值。

//顺序表修改元素
table changeTable(table t,int elem,int newElem)
{
	int pos=selectTable(t,elem);//1、先查找到目标元素位置
	t.head[pos-1]=newElem;//2、用新的值进行原来位置的覆盖
	return t;	
} 

5、完整代码:
#include
#include
#define Size 5

//定义顺序表 
typedef struct Table{
	int *head;//动态数组首地址 
	int length;//数组逻辑长度 
	int size;//数组物理长度 
}table;//给struct Table起的别名

//顺序表的初始化 
table initTable(){
	table t;
	t.head=(int*)malloc(Size*sizeof(int));//给数组分配整块的地址空间
	if(!t.head)
	{
		printf("初始化失败n");
		exit(0);	
	}
	t.length=0;
	t.size=Size;
	return t; 
} 

//顺序表的插入
table insertTable(table t,int elem,int pos){
	//1、判断插入位置是否合理
	if(pos<1||pos>t.length+1){
		printf("插入位置错误!n");
		return t;	
	} 
	//2、为插入值新分配一个空间
	if(t.length>=t.size){
		t.head=(int*)realloc(t.head,(t.size+1)*sizeof(int));
		if(!t.head)
		{
			printf("新分配空间失败!n");
		}
		t.size+=1;
	} 
	//3、插入操作
	for(int i=t.length-1;i>=pos-1;i--){
		t.head[i+1]=t.head[i];
	} 
	t.head[pos-1]=elem;
	t.length++;
	return t;
}

//顺序表的删除
table delTable(table t,int pos){
	//1、判断删除位置是否合理
	if(pos>t.length||pos<1){
		printf("删除位置错误!n"); 
		return t;
	}
	//2、删除操作 
	for(int i=pos-1;i 

输出结果:

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1027806.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号