查找元素x,若x存在,则与其后继交换,否则将x插入,使顺序表有序

2024-05-01 09:32

本文主要是介绍查找元素x,若x存在,则与其后继交换,否则将x插入,使顺序表有序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

#include<stdio.h>
#define LIST_INIT_SIZE 6
#define LISTINCREMENT 10
typedef int ElemType;
typedef struct{ElemType *elem;int length;int listsize;
}SqList;void InitSqList(SqList *L);//初始化顺序表
void CreateSqList(SqList *L, ElemType *arr, int n);//给予顺序表初始数据
void ShowSqList(SqList *L);//输出顺序表数据//二分法查找x,找到则返回元素索引,找不到则返回不大于x的最大元素索引的相反数
int SearchByElem(SqList *L, ElemType x);
//第i个数据之前插入x
void InsertByIndex(SqList *L, int i, ElemType x);
//交换数据值
void swap(ElemType *x, ElemType *y);
//查找元素x,若x存在,则与其后继交换,否则将x插入,使顺序表有序
void SearchSwapInsert(SqList *L, ElemType x);int main()
{SqList L;ElemType arr[6] = { 1, 2, 3, 5, 7, 6 };InitSqList(&L);CreateSqList(&L, arr, 6);printf("初始数据列表:");ShowSqList(&L);printf("\n");printf("执行查找交换插入算法,数据为:%d\n",7);SearchSwapInsert(&L, 7);ShowSqList(&L);printf("执行查找交换插入算法,数据为:%d\n", 4);SearchSwapInsert(&L, 4);ShowSqList(&L);getchar();return 0;
}void InitSqList(SqList *L)
{L->elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));L->length = 0;L->listsize = LIST_INIT_SIZE;
}void CreateSqList(SqList *L, ElemType *arr, int n)
{int i;if (n <= LIST_INIT_SIZE){for (i = 0; i < n; i++){L->elem[i] = arr[i];}L->length = n;}else{printf("插入失败,数据个数应不大于 %d", LIST_INIT_SIZE);}
}void ShowSqList(SqList *L)
{int i;for (int i = 0; i < L->length; i++){printf(" %d ", L->elem[i]);}printf("\n");
}//二分法查找x,找到则返回元素索引,找不到则返回不大于x的最大元素索引
int SearchByElem(SqList *L, ElemType x)
{int high = L->length - 1;int low = 0;int mid;while (low <= high){mid = (high + low) / 2;if (L->elem[mid] == x){return mid;}else if (x < L->elem[mid]){high = mid - 1;}else{low = mid + 1;}}//high为小于x元素集合中的最大值的索引return -high;
}//第i个数据之前插入x
void InsertByIndex(SqList *L, int i, ElemType x)
{if (i<1||i>L->length+1){printf("位置不合法,插入失败!");return;}if (L->length >= L->listsize){ElemType *enew = (ElemType *)realloc(L->elem, (LISTINCREMENT + L->listsize) * sizeof(ElemType));L->elem = enew;L->listsize += LISTINCREMENT;}ElemType *p = &(L->elem[i - 1]);//待插入的位置ElemType *q = &(L->elem[L->length - 1]);//q指向最后一个元素for (; p <= q; q--){*(q + 1) = *q;}*p = x;L->length++;
}void swap(ElemType *x, ElemType *y)
{ElemType t = *y;*y = *x;*x = t;
}void SearchSwapInsert(SqList *L, ElemType x)
{int k;if ((k = SearchByElem(L, x)) >= 0){swap(&(L->elem[k]), &(L->elem[k + 1]));}else{InsertByIndex(L, -k + 2, x);}
}

这篇关于查找元素x,若x存在,则与其后继交换,否则将x插入,使顺序表有序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

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

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

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

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

CSS3中使用flex和grid实现等高元素布局的示例代码

《CSS3中使用flex和grid实现等高元素布局的示例代码》:本文主要介绍了使用CSS3中的Flexbox和Grid布局实现等高元素布局的方法,通过简单的两列实现、每行放置3列以及全部代码的展示,展示了这两种布局方式的实现细节和效果,详细内容请阅读本文,希望能对你有所帮助... 过往的实现方法是使用浮动加

C++实现封装的顺序表的操作与实践

《C++实现封装的顺序表的操作与实践》在程序设计中,顺序表是一种常见的线性数据结构,通常用于存储具有固定顺序的元素,与链表不同,顺序表中的元素是连续存储的,因此访问速度较快,但插入和删除操作的效率可能... 目录一、顺序表的基本概念二、顺序表类的设计1. 顺序表类的成员变量2. 构造函数和析构函数三、顺序表

使用Python在Excel中插入、修改、提取和删除超链接

《使用Python在Excel中插入、修改、提取和删除超链接》超链接是Excel中的常用功能,通过点击超链接可以快速跳转到外部网站、本地文件或工作表中的特定单元格,有效提升数据访问的效率和用户体验,这... 目录引言使用工具python在Excel中插入超链接Python修改Excel中的超链接Python

在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

《在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码》在MyBatis的XML映射文件中,trim元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示... 在MyBATis的XML映射文件中,<trim>元素用于动态地添加SQL语句的一部分,例如SET或W

python 字典d[k]中key不存在的解决方案

《python字典d[k]中key不存在的解决方案》本文主要介绍了在Python中处理字典键不存在时获取默认值的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录defaultdict:处理找不到的键的一个选择特殊方法__missing__有时候为了方便起见,

JAVA利用顺序表实现“杨辉三角”的思路及代码示例

《JAVA利用顺序表实现“杨辉三角”的思路及代码示例》杨辉三角形是中国古代数学的杰出研究成果之一,是我国北宋数学家贾宪于1050年首先发现并使用的,:本文主要介绍JAVA利用顺序表实现杨辉三角的思... 目录一:“杨辉三角”题目链接二:题解代码:三:题解思路:总结一:“杨辉三角”题目链接题目链接:点击这里

如何测试计算机的内存是否存在问题? 判断电脑内存故障的多种方法

《如何测试计算机的内存是否存在问题?判断电脑内存故障的多种方法》内存是电脑中非常重要的组件之一,如果内存出现故障,可能会导致电脑出现各种问题,如蓝屏、死机、程序崩溃等,如何判断内存是否出现故障呢?下... 如果你的电脑是崩溃、冻结还是不稳定,那么它的内存可能有问题。要进行检查,你可以使用Windows 11