删除顺序表中所有值为X的元素(顺序表,单链表)

news2024/11/22 15:22:35

目录

时间复杂度为O(1)(顺序表):代码实现:

运行结果:

时间复杂度为O(n)(顺序表):代码实现:

运行结果:

单链表:时间复杂度o(n):代码实现:


时间复杂度为O(1)(顺序表):代码实现:

#include<iostream>
using namespace std;
#define MAXSIZE 100
#define ok -1
#define error -2
typedef int Status;
typedef int ElemType; 
typedef struct
{
	ElemType *elem;
	int length;
}Sqlist;
Status InitList(Sqlist &L);
void chushi(Sqlist &L,int x);
void shuchu(Sqlist L); 
Status GetElem(Sqlist L,int i,ElemType &e);
Status ListInsert(Sqlist &L,int i,ElemType e);
Status Delete(Sqlist &L,int i);
Status Sort(Sqlist &L);
void SequenceSort(Sqlist &L,ElemType x);
void delete1(Sqlist &L,int x);
int main()
{
	Sqlist L;
	int x,i,j;
	Status m;
	ElemType e;
	x=InitList(L);
	if(x==error) cout<<"初始化失败"<<endl;
	else      	 cout<<"初始化成功"<<endl;
	cout<<"请决定输入元素的个数";
	cin>>x;
	chushi(L,x); 
	cout<<"此时顺序表为:"<<endl;
	shuchu(L);
	cout<<endl<<"请输入要删除的元素";
	cin>>x;
	delete1(L,x);
	cout<<"删除后的表为"<<endl;
	shuchu(L);
	return 0;
}
Status InitList(Sqlist &L)//初始化开辟空间 
{
	L.elem=new ElemType[MAXSIZE];
	if(!L.elem) return error;
	L.length=0;
	return ok;
}
void chushi(Sqlist &L,int x)//初始化赋值 
{
	ElemType m;
	for(int i=0;i<x;i++)
	{
		cout<<"请对第"<<i+1<<"个位置赋值";
		cin>>m;
		L.elem[i]=m;
		L.length++;
	}
}

void shuchu(Sqlist L)//输出操作 
{
	cout<<"顺序表为:";
	for(int i=0;i<L.length;i++)
	{
		cout<<L.elem[i]<<"  ";
	}
} 
void delete1(Sqlist &L,int x){
	int i=0,k=0;
	for(int i=0;i<L.length;i++){
		if(L.elem[i]!=x){
			L.elem[k]=L.elem[i];
			k++;
		}
		
	}
	L.length-=L.length-k;
}

运行结果:

时间复杂度为O(n)(顺序表):代码实现:

#include<stdio.h>
#include"sqlist.cpp"
/*已知长度为n的线性表A采用顺序存储结构,
编写一个时间复杂度为O(n)、空间复杂度为O(1)的算法,
该算法删除线性表中所有值为x的数据元素。
*/
void DeleteNode1(SqList *&L,ElemType x)
{
	int k=0;//k记录元素值不等于x的个数
	for(int i=0;i<L->length ;i++)
	{
		if(L->data [i]!=x)//若当前元素不为x,则将其插入到L中 
		{
			L->data[k]=L->data[i];
			k++;
		}
	} 
	L->length = k;
}
//算法1类似于建顺序表
 
void DeleteNode2(SqList *&L,ElemType x)
{
	int k=0;
	for(int i=0;i<L->length ;i++)
	{
		if(L->data [i]==x)//当前元素为x时k增1 
		{
			k++;
		}
		else
		{
			L->data [i-k]=L->data [i];//当前元素不为x时将其前移k个位置 
		}
	}
	L->length -= k;//顺序表L的长度减K 
}
int main(int argc,char *argv[])
{
	ElemType x;
	ElemType a[]={1,2,2,1,0,2,4,2,3,1};
	SqList *L;
	InitList(L);//初始化线性表
	CreateList(L,a,10);//数组名代表数组元素的首地址 
	printf("L:");
	DisplayList(L);
	printf("请输入要删除元素的值:");
	scanf("%d",&x);
	printf("删除值为%d的元素 \n",x);
//	DeleteNode1(L,x); 
	DeleteNode2(L,x);
	printf("L:");
	DisplayList(L);
	DestroyList(L);
	return 0;
}
运行结果:

单链表:时间复杂度o(n):代码实现:
#include<iostream>
using namespace std;
#define ok -1
#define error -2
typedef int Status;
typedef int ElemType; 
typedef struct LNode
{
	ElemType data;
	struct LNode *next;
}LNode,*LinkList;
Status InitList(LinkList &L);
Status fuzhi(LinkList &L,int m);
void shuchu(LinkList L);
Status ListInsert(LinkList &L,int m,ElemType y);
Status Delete(LinkList &L,int n);//删除
void Sort(LinkList &L);
Status Length(LinkList L);
void SequenceSort(LinkList &L,ElemType x);
void delete1(LinkList &L,int x);
int main()
{
	LinkList L;
	int x,m,n;
	ElemType y;
	x=InitList(L);
	if(x==error) cout<<"初始化失败";
	else         cout<<"初始化成功"<<endl;
	cout<<"请决定输入几个元素";
	cin>>m;
	x=fuzhi(L,m);
	if(x==error) cout<<"赋值失败";
	shuchu(L);
	cout<<"请决定删除元素:";
	cin>>x;
	delete1(L,x);
	shuchu(L);
	return 0;
}
Status InitList(LinkList &L)
{
	L=new LNode;
	if(L==NULL) return error;
	L->next=NULL;
	return ok;
}
Status fuzhi(LinkList &L,int m)
{
	LNode *s,*r=L;
	ElemType n;
	for(int i=1;i<=m;i++)
	{
		cout<<"请输入第"<<i<<"个元素";
		cin>>n; 
		s=new LNode;
		s->data=n;
		r->next=s;
		r=s;
	}
	r->next=NULL;
	return ok;
}
void shuchu(LinkList L)
{
	LNode *p;
	p=L->next;
	cout<<"单链表内容为:";
	while(p!=NULL)
	{
		cout<<p->data<<" ";
		p=p->next;
	}
	cout<<endl;
}
void delete1(LinkList &L,int x){
	LNode *p,*s;
	p=L;
	while(p){
		if(p->next->data==x){
			s=p->next;
			p->next=s->next;
			delete s;
		}
		p=p->next;
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1608059.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

20240415,构造函数和析构函数,拷贝构造函数调用时机规则

目录 二&#xff0c;对象的初始化和清理 2.1 构造函数和析构函数 2.2 函数分类及调用 2.3 拷贝构造函数调用时机 2.4 构造函数调用规则 二&#xff0c;对象的初始化和清理 2.1 构造函数和析构函数 解决初始化和清理问题&#xff0c;编译器自动调用&#xff0c;如果不提…

探索异常传播:深入剖析Python中的错误处理机制

文章目录 1. 异常传播的基本原理2. 复杂的异常传播场景3. 再次抛出异常的意义是什么&#xff1f;4. 最佳实践与异常处理策略 理解异常传播&#xff08;也称为异常冒泡&#xff09;的过程是至关重要的。这一机制确保当在程序执行中发生错误时&#xff0c;错误能被有效地捕获和处…

CentOS7下安装mysql8或者mysql5.7

mysql8 1、下载 访问mysql官网下载mysql8软件包 https://dev.mysql.com/downloads/mysql/ 选择相应的版本如&#xff1a;RPM Bundle mysql-8.0.33-1.el7.x86_64.rpm-bundle.tar RPM Bundle 8.0.33 下载地址&#xff1a;https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.…

springboot结合vue实现文件上传下载功能

紧接着上一次的博客&#xff0c;这次来实现一下文件(主要是图片)的上传和下载功能&#xff0c;上一次的博客如下所示&#xff1a; Springboot集成JWT token实现权限验证-CSDN博客 其实文件的上传和下载功能(后端的部分)&#xff0c;在我之前的博客就已经有写了&#xff0c;所以…

【学习】关于测试技术的重要性和挑战有哪些

随着信息技术的飞速发展&#xff0c;软件产品已成为现代社会不可或缺的一部分。在软件研发过程中&#xff0c;测试技术的重要性日益凸显。它不仅是确保软件质量的关键环节&#xff0c;也是降低软件故障风险、提高用户体验的重要手段。然而&#xff0c;测试技术也面临着诸多挑战…

【触想智能】如何选购到一款合适的工业电脑一体机

工业电脑一体机是专为工业环境而设计的一种工业计算机。工业电脑一体机和普通的计算机不一样&#xff0c;它对产品的参数性能要求很高&#xff0c;因为它们通常会运行在高低温、电磁干扰、高粉尘、湿度大的恶劣环境中&#xff0c;所以相应的要求工业电脑一体机必须具备良好的宽…

Qt日志使用

QsLog使用 这篇讲qt的日志还是比较好的&#xff0c;可以在自己的函数里面配置这个日志框架实现自己所需的功能。 我接触的项目里面&#xff0c;假如有个函数功能执行错误了&#xff0c;我希望可以快速定位到这个错误&#xff0c;这个时候就需要到了日志&#xff0c;我咨询了有经…

LeetCode 113—— 路径总和 II

阅读目录 1. 题目2. 解题思路3. 代码实现 1. 题目 2. 解题思路 看到树的问题一般我们先考虑一下是否能用递归来做。 假设 root 节点的值为 value&#xff0c;如果根节点的左子树有一个路径总和等于 targetSum - value&#xff0c;那么只需要将根节点的值插入到这个路径列表中…

VUE 页码分页封装

VUE 页码封装组件 pagination/index.vue &#xff1a; <template><div class"pagination-contianer"><el-pagination background layout"prev, pager, next" :total"total" current-change"currentChange"> </e…

jdk17 +MAT进行内存分析

MemoryAnalyzer要进行内存分析&#xff0c;需要Dump快照 文件 手动获取Dump快照 文件 jmap -dump:live,formatb,file/path/to/heapdump.hprof <PID>然后再MAT 进行分析&#xff1a;

基于达梦数据库开发-C#篇

文章目录 前言一、相关准备二、主要代码1.引入达梦类库2.连接达梦数据库3.DmCommand方式获取达梦数据库信息4.DmDataAdapter方式获取达梦数据库信息 总结 前言 达梦数据库是国产的新一代大型通用关系型数据库&#xff0c;全面支持 SQL 标准和主流编程语言接口/开发框架。其中.…

LD-Pruner、EdgeFusion(On-Device T2I)、FreeDiff、TextCenGen、MemLLM

本文首发于公众号&#xff1a;机器感知 https://mp.weixin.qq.com/s/KiyNfwYWU-wBiCO-hE9qkA 苏 The devil is in the object boundary: towards annotation-free instance segmentation using Foundation Models Foundation models, pre-trained on a large amount of data…

arm64-v8a、armeabi-v7a、x86、x86_64

当我们去GitHub下载应用的时候是不是经常很懵逼&#xff0c;就像下图一样&#xff0c;粗看一下如此多安装包到底要选择下载哪个且每种安装包到底有哪差别&#xff1f;毕竟因为自己一无所知&#xff0c;有时便随意下载一个后&#xff0c;安装时却报『此版本与你的系统不兼容』的…

TCP三次握手,但通俗理解

如何用通俗的语言来解释TCP&#xff08;传输控制协议&#xff09;的三次握手过程&#xff1f; 想象一下你正在和朋友电话沟通&#xff0c;但你们之间不是心灵感应&#xff0c;而是需要通过清晰地听到对方的声音来确认通话质量良好。TCP三次握手就像是在电话拨通之前&#xff0…

JavaScript 流程控制-循环

一、循环 二、 for 循环 重复执行的语句被称为循环体&#xff0c;能否继续重复执行&#xff0c;取决于循环的终止条件。 由循环体及循环的终止条件组成的语句被称为循环语句 1、语法结构 for 循环 主要用于把某些代码循环若干次&#xff0c;通常跟计数有关 for &#xff08…

C++-命名空间

C 命名空间是一种用于组织代码的机制&#xff0c;可以帮助避免命名冲突&#xff0c;提高代码的可读性和可维护性。命名空间将代码分组到逻辑单元中&#xff0c;允许在不同的代码单元中使用相同的名称而不会产生冲突。 命名空间通过将代码放置在一个命名空间内部来实现。在 C 中…

重构国内游戏账号登录系统的思考和实践

本期作者 背景 账号登录系统&#xff0c;作为游戏发行平台最重要的应用之一&#xff0c;在当前的发行平台的应用架构中&#xff0c;主要承载的是用户的账号注册、登录、实名、防沉迷、隐私合规、风控等职责。合规作为企业经营的生命线&#xff0c;同时&#xff0c;账号登录作为…

解决跨域和https不能访问的问题。

本地安装了项目,是一键安装的,安装之后还是apache的web服务器,有个视频服务用的是https的服务,要对这个项目进行二次开发,本地调用没问题,可是别人已调用就跨域。只能本地访问。 现在有两个问题:1.解决跨域问题 2.还要解决https访问的问题。 解决思路,用nginx 的ssl证…

语雀如何显示 Markdown 语法

正常的文章链接 https://www.yuque.com/TesterRoad/t554s28/eds3pfeffefw12x94wu8rwer8o 访问后是文章&#xff0c;无法复制 markdown 的内容 在链接后增加参数 /markdown?plaintrue&linebreakfalse&anchorfalse 直接显示代码

力扣经典150题第三十题:长度最小的子数组

目录 力扣经典150题解析之三十&#xff1a;长度最小的子数组1. 介绍2. 问题描述3. 示例4. 解题思路方法一&#xff1a;滑动窗口 5. 算法实现6. 复杂度分析7. 测试与验证测试用例设计测试结果分析 8. 进阶9. 总结10. 参考文献感谢阅读 力扣经典150题解析之三十&#xff1a;长度最…