快速检索的方法删除顺序表中的元素

2024-06-20 16:08

本文主要是介绍快速检索的方法删除顺序表中的元素,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

使用顺序表存储元素并且删除一定的元素,传统的遍历的方法的时间复杂度为O(n^2);使用快速检索的方法使得时间复杂度为O(n);
 采用快速检索的思想,用两个变量i和k记录顺序表中被处理的两端元素的下标,边检索边增加i和减少j,当遇到不相等的i处数值时,将j处的与之交换,直到i>=j,为止,由于移动每个元素一次使得复杂度为O(n);
#include<stdio.h>
#include<stdlib.h>
#define MAX 100
typedef struct Seqlist
{char element[MAX];int n;
}*PSeqlist;int delx_seq(PSeqlist p,char q)//删除表中所有值为p的元素,不过会破坏表的顺序
{int i = 0,j = p->n-1,count = 0;while(i < j){if(p->element[i] == q){while((p->element[j] == q) &&(j != i)){j--;count++;}if(j == i){p->n = p->n-count-1;}else{p->element[i] = p->element[j];count++;j--;}}i++;}p->n = p->n-count;if(p->element[i] == q){p->n--;count++;}return count;
}
PSeqlist creatNulllist(int n)
{PSeqlist palist;palist = (PSeqlist)malloc(sizeof(struct Seqlist));if(palist != NULL)  palist->n = n;else printf("Out of space!\n");return palist;
}int main()
{int n,i;char p;PSeqlist palist;printf("Input the number of element:\n");scanf(" %d",&n);palist = creatNulllist(n);printf("Input the element:\n");for(i = 0;i < n;i++){scanf(" %c",&(palist->element[i]));}printf("The element you want to delete:\n");scanf(" %c",&p);printf("The num of %c have been delete is %d",p,delx_seq(palist,p));return 0;
}

这篇关于快速检索的方法删除顺序表中的元素的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1078613

相关文章

使用Python快速实现链接转word文档

《使用Python快速实现链接转word文档》这篇文章主要为大家详细介绍了如何使用Python快速实现链接转word文档功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 演示代码展示from newspaper import Articlefrom docx import

oracle DBMS_SQL.PARSE的使用方法和示例

《oracleDBMS_SQL.PARSE的使用方法和示例》DBMS_SQL是Oracle数据库中的一个强大包,用于动态构建和执行SQL语句,DBMS_SQL.PARSE过程解析SQL语句或PL/S... 目录语法示例注意事项DBMS_SQL 是 oracle 数据库中的一个强大包,它允许动态地构建和执行

Ubuntu固定虚拟机ip地址的方法教程

《Ubuntu固定虚拟机ip地址的方法教程》本文详细介绍了如何在Ubuntu虚拟机中固定IP地址,包括检查和编辑`/etc/apt/sources.list`文件、更新网络配置文件以及使用Networ... 1、由于虚拟机网络是桥接,所以ip地址会不停地变化,接下来我们就讲述ip如何固定 2、如果apt安

Python中顺序结构和循环结构示例代码

《Python中顺序结构和循环结构示例代码》:本文主要介绍Python中的条件语句和循环语句,条件语句用于根据条件执行不同的代码块,循环语句用于重复执行一段代码,文章还详细说明了range函数的使... 目录一、条件语句(1)条件语句的定义(2)条件语句的语法(a)单分支 if(b)双分支 if-else(

Go路由注册方法详解

《Go路由注册方法详解》Go语言中,http.NewServeMux()和http.HandleFunc()是两种不同的路由注册方式,前者创建独立的ServeMux实例,适合模块化和分层路由,灵活性高... 目录Go路由注册方法1. 路由注册的方式2. 路由器的独立性3. 灵活性4. 启动服务器的方式5.

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

关于Spring @Bean 相同加载顺序不同结果不同的问题记录

《关于Spring@Bean相同加载顺序不同结果不同的问题记录》本文主要探讨了在Spring5.1.3.RELEASE版本下,当有两个全注解类定义相同类型的Bean时,由于加载顺序不同,最终生成的... 目录问题说明测试输出1测试输出2@Bean注解的BeanDefiChina编程nition加入时机总结问题说明

docker如何删除悬空镜像

《docker如何删除悬空镜像》文章介绍了如何使用Docker命令删除悬空镜像,以提高服务器空间利用率,通过使用dockerimage命令结合filter和awk工具,可以过滤出没有Tag的镜像,并将... 目录docChina编程ker删除悬空镜像前言悬空镜像docker官方提供的方式自定义方式总结docker

Spring排序机制之接口与注解的使用方法

《Spring排序机制之接口与注解的使用方法》本文介绍了Spring中多种排序机制,包括Ordered接口、PriorityOrdered接口、@Order注解和@Priority注解,提供了详细示例... 目录一、Spring 排序的需求场景二、Spring 中的排序机制1、Ordered 接口2、Pri

Idea实现接口的方法上无法添加@Override注解的解决方案

《Idea实现接口的方法上无法添加@Override注解的解决方案》文章介绍了在IDEA中实现接口方法时无法添加@Override注解的问题及其解决方法,主要步骤包括更改项目结构中的Languagel... 目录Idea实现接China编程口的方法上无法添加@javascriptOverride注解错误原因解决方