资讯 小学 初中 高中 语言 会计职称 学历提升 法考 计算机考试 医护考试 建工考试 教育百科
栏目分类:
子分类:
返回
空麓网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
空麓网 > 计算机考试 > 软件开发 > 后端开发 > C/C++/C#

顺序表的插入和删除操作

C/C++/C# 更新时间: 发布时间: 计算机考试归档 最新发布

顺序表的插入和删除操作

C语言线性表的插入和删除操作

C语言数据结构的学习之线性表的插入与删除操作
  • C语言线性表的插入和删除操作
    • 一、插入操作
      • 插入操作的时间复杂度分析:
    • 二、删除操作
      • 删除操作的时间复杂度分析:

一、插入操作
#include
#define MaxSize 10
typedef struct{
	int data[MaxSize];     //用静态(整数int/抽象,泛型ElemType)数组存放数据元素
	int length;					//顺序表当前长度
}SqList;					//顺序表的类型定义

//基本操作——初始化一个顺序表
void InitList(SqList &L){
	for(int i=0;i		//如果不将所有数据元素设置为默认初始值就会出现脏数据
		L.data[i]=0;			//将所有数据元素设置为默认初始值
	}
	L.length=5;				//顺序表初始长度为5(不能超过MaxSize)
}



//顺序表元素的插入操作(L-线性表,i-要插入的位置,e-要插入的元素)
bool ListInsert(SqList &L,int i,int e){
	//为了保证一个合法的i,这里需要加判断
	//线性表是连续存储空间,所以需要判断i的合法性
	if(i<1||i>L.length+1){
		return false;
	}
	//顺序表已经存满,不能再存了
	if(L.length>=MaxSize){
		return false;
	}

	//将插入位置之后的所有元素向后移一位  
	//按数组下标是从0开始的,所以length-1就是他的最后一个元素
	for(int j = L.length;j>=i;j--){
		L.data[j] = L.data[j-1];
	}
	L.data[i-1] = e;		//在i位置处放入e
	L.length++;			//更新线性表的长度
	return true;
}

int main(){
	SqList L;			//声明一个顺序表
	InitList(L);		//初始化顺序表
	if(ListInsert(L,4,10)==true){
		printf("插入元素之后的线性表长度为%dn:",L.length);
		printf("插入元素之后线性表的元素为:n");
		for(int i =0;i
			printf("data[%d] = %dn",i,L.data[i]);
		}
		
	}else{
		printf("线性表已经插满或检查要插入的位置是否合法n");
	}
	return 0;
}

插入操作的时间复杂度分析:


综上,插入操作的平均时间复杂度是O(n)。

二、删除操作
#include
#define MaxSize 10
typedef struct{
	int data[MaxSize];     //用静态(整数int/抽象,泛型ElemType)数组存放数据元素
	int length;					//顺序表当前长度
}SqList;					//顺序表的类型定义

//基本操作——初始化一个顺序表
void InitList(SqList &L){
	for(int i=0;i		//如果不将所有数据元素设置为默认初始值就会出现脏数据
		L.data[i]=0;			//将所有数据元素设置为默认初始值
	}
	L.length=5;				//顺序表初始长度为0
}



//顺序表元素的插入操作(L-线性表,i-要插入的位置,e-要插入的元素)
bool ListInsert(SqList &L,int i,int e){
	//为了保证一个合法的i,这里需要加判断
	//线性表是连续存储空间,所以需要判断i的合法性
	if(i<1||i>L.length+1){
		return false;
	}
	//顺序表已经存满,不能再存了
	if(L.length>=MaxSize){
		return false;
	}

	//将插入位置之后的所有元素向后移一位  
	//按数组下标是从0开始的,所以length-1就是他的最后一个元素
	for(int j = L.length;j>=i;j--){
		L.data[j] = L.data[j-1];
	}
	L.data[i-1] = e;		//在i位置处放入e
	L.length++;			//更新线性表的长度
	return true;
}
//加上引用符号&说明传入的e和本函数中的元素e是同一个引用地址,若是不加,那么他们两个就只是值相同,但是引用地址不同的元素
bool ListDelete(SqList &L,int i,int &e){
	//先判断删除位置是否合法
	if(i<1||i>L.length+1){
		return false;
	}
	e = L.data[i-1];	//将要删除的元素赋给e
	//将i之后的元素依次向前移一位
	for(int j = i;j
		L.data[j-1] = L.data[j];
	}
	L.length--;		//更新线性表的长度
	return true;
}


int main(){
	SqList L;			//声明一个顺序表
	InitList(L);		//初始化顺序表

	//插入一些元素...
	int e = -1;		//用变量e把删除的元素带回来
	if(ListDelete(L,3,e)){
		printf("删除成功,删除的元素为%d",e);
	}else{
		printf("删除失败,检查你要删除的位置是否合法n");
	}
	return 0;
}

删除操作的时间复杂度分析:


综上,删除操作的平均时间复杂度也是O(n)。

转载请注明:文章转载自 http://www.konglu.com/
本文地址:http://www.konglu.com/it/989997.html
免责声明:

我们致力于保护作者版权,注重分享,被刊用文章【顺序表的插入和删除操作】因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理,本文部分文字与图片资源来自于网络,转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们,情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!

我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2023 成都空麓科技有限公司

ICP备案号:蜀ICP备2023000828号-2