查找元素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

相关文章

把Python列表中的元素移动到开头的三种方法

《把Python列表中的元素移动到开头的三种方法》在Python编程中,我们经常需要对列表(list)进行操作,有时,我们希望将列表中的某个元素移动到最前面,使其成为第一项,本文给大家介绍了把Pyth... 目录一、查找删除插入法1. 找到元素的索引2. 移除元素3. 插入到列表开头二、使用列表切片(Lis

Spring Bean初始化及@PostConstruc执行顺序示例详解

《SpringBean初始化及@PostConstruc执行顺序示例详解》本文给大家介绍SpringBean初始化及@PostConstruc执行顺序,本文通过实例代码给大家介绍的非常详细,对大家的... 目录1. Bean初始化执行顺序2. 成员变量初始化顺序2.1 普通Java类(非Spring环境)(

浅析Spring如何控制Bean的加载顺序

《浅析Spring如何控制Bean的加载顺序》在大多数情况下,我们不需要手动控制Bean的加载顺序,因为Spring的IoC容器足够智能,但在某些特殊场景下,这种隐式的依赖关系可能不存在,下面我们就来... 目录核心原则:依赖驱动加载手动控制 Bean 加载顺序的方法方法 1:使用@DependsOn(最直

MySQL中查找重复值的实现

《MySQL中查找重复值的实现》查找重复值是一项常见需求,比如在数据清理、数据分析、数据质量检查等场景下,我们常常需要找出表中某列或多列的重复值,具有一定的参考价值,感兴趣的可以了解一下... 目录技术背景实现步骤方法一:使用GROUP BY和HAVING子句方法二:仅返回重复值方法三:返回完整记录方法四:

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

python3如何找到字典的下标index、获取list中指定元素的位置索引

《python3如何找到字典的下标index、获取list中指定元素的位置索引》:本文主要介绍python3如何找到字典的下标index、获取list中指定元素的位置索引问题,具有很好的参考价值,... 目录enumerate()找到字典的下标 index获取list中指定元素的位置索引总结enumerat

Spring如何使用注解@DependsOn控制Bean加载顺序

《Spring如何使用注解@DependsOn控制Bean加载顺序》:本文主要介绍Spring如何使用注解@DependsOn控制Bean加载顺序,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录1.javascript 前言2. 代码实现总结1. 前言默认情况下,Spring加载Bean的顺

CSS实现元素撑满剩余空间的五种方法

《CSS实现元素撑满剩余空间的五种方法》在日常开发中,我们经常需要让某个元素占据容器的剩余空间,本文将介绍5种不同的方法来实现这个需求,并分析各种方法的优缺点,感兴趣的朋友一起看看吧... css实现元素撑满剩余空间的5种方法 在日常开发中,我们经常需要让某个元素占据容器的剩余空间。这是一个常见的布局需求

python判断文件是否存在常用的几种方式

《python判断文件是否存在常用的几种方式》在Python中我们在读写文件之前,首先要做的事情就是判断文件是否存在,否则很容易发生错误的情况,:本文主要介绍python判断文件是否存在常用的几种... 目录1. 使用 os.path.exists()2. 使用 os.path.isfile()3. 使用

C++作用域和标识符查找规则详解

《C++作用域和标识符查找规则详解》在C++中,作用域(Scope)和标识符查找(IdentifierLookup)是理解代码行为的重要概念,本文将详细介绍这些规则,并通过实例来说明它们的工作原理,需... 目录作用域标识符查找规则1. 普通查找(Ordinary Lookup)2. 限定查找(Qualif