速通数据结构顺序表代码题

顺序表

    • 顺序表递增有序,插入元素x,仍递增有序
    • 用顺序表最后一个元素覆盖整个顺序表中最小元素,并返回该最小元素
    • 将顺序表的元素逆置
    • 将a1,a2,a3……am b1,b2,b3……bn转换成b1,b2,b3……bn a1,a2,a3……am
    • 删除顺序表中所有值为x的元素
    • 从顺序表中删除给定值再s到t之间(包括s和t)的所有元素
    • 删除有序表中所有值重复的元素
    • 删除有序表中所有值重复的元素
    • 将两个递增有序表 合并为 一个递增有序表
    • 求两个递增序列的中位数
    • 设计一个时间上尽可能高效的算法,找出数组中未出现的最小正整数
    • 若一个整数序列中有过半相同元素,则称其为主元素设计算法找出数组A(a0,a1……an - 1)的主元素。(其中0 < ai < n)若存在主元素则输出,否则返回 - 1

顺序表递增有序,插入元素x,仍递增有序

#include <iostream>
using namespace std;
#define maxsize 100
typedef struct
{int data[maxsize];int length;
} Sqlist;/*顺序表递增有序,插入元素x,仍递增有序2 5 8 11 19       此时插入一个9 插入的9插入的是原来10的数组下标2 5 8 9  11 191、找位置 i2、元素右移*//*1 3 5 7 9     9 7 5 3 1 2 4 6 8       8 6 4 2
*/
int find(Sqlist L, int x)//参数为:传入顺序表 和 要插入的那个数字
{int i = 0;                                                     //要声明一下 不然for循环的局部变量会被释放掉//for (; i < L.length; ++i)//{//	if (x < L.data[i])//		break;//}//return i;for (int i = 0; i < L.length; i++){if (L.data[i]<x){continue;}else{return i;}}}void insert(Sqlist &L, int x)//元素后移操作 这里需要加入引用符号 参数为:顺序表 和 插入的位置
{int j, p;//定义两个变量 p为记录找到的插入的位置 j的初值为顺序表末尾的数的下标p = find(L, x);for (j = L.length - 1; j >= p; --j)//从插入的位置开始(包括插入前的位置)依次往后进行移动{L.data[j + 1] = L.data[j];}L.data[p] = x;//插入数据++(L.length); //更新顺序表的长度
}void insert23(Sqlist &L, int x)
{int pos = L.data[0];for (int i = 0; i < L.length - 1; i++){if (L.data[i] < x) {pos = i;}}pos += 1;for (int j = L.length-1; j >=pos; j--){L.data[j + 1] = L.data[j];}L.data[pos] = x;++L.length;
}void insert233(Sqlist &L, int x)
{int i;for (i = 0; i < L.length - 1; i++){if (L.data[i]>x){break;//break掉的值就是第一个不满足的值}}cout << "i=" << i;cout << endl;for (int j = L.length - 1; j >= i; j--){L.data[j + 1] = L.data[j];}L.data[i] = x;++L.length;
}int main01()
{Sqlist L = { {1, 3, 5, 8, 9}, 5 };//定义了一个顺序表 和 5这个数 这个数代表着长度insert233(L, 6);for (int j = 0; j < L.length; ++j){cout << L.data[j] << endl;}cout << endl;cout << L.length;return EXIT_SUCCESS;
}

用顺序表最后一个元素覆盖整个顺序表中最小元素,并返回该最小元素

#include <iostream>
using namespace std;
#define maxsize 100
typedef struct
{int data[maxsize];int length;
} Sqlist;/*用顺序表最后一个元素覆盖整个顺序表中最小元素,并返回该最小元素1、找最小元素的位置2、用最后一个元素覆盖掉最小元素5  13  3   7  105  13  10  7
*/int Del_Min(Sqlist &L)
{int min = L.data[0];//初始化最小值int pos = 0;//初始化记录位置的值for (int i = 0; i < L.length; ++i){if (L.data[i] < min){min = L.data[i];pos = i;}L.data[pos] = L.data[L.length - 1];L.length--;}return min;
}int main02()
{Sqlist L = { {5,13,3,7,10}, 5 };int min = Del_Min(L);for (int j = 0; j < L.length; ++j){cout << L.data[j] << endl;}cout << endl;cout << "" << min << endl;return EXIT_SUCCESS;
}

将顺序表的元素逆置

#include <iostream>
using namespace std;
#define maxsize 100
typedef struct
{int data[maxsize];int length;
} Sqlist;
/*将顺序表的元素逆置4  7  16  3  99  3  16  7  44 7 16 3 9 11 9 3 16 7 4
*/
void Reverse(Sqlist &L)
{int temp, i = 0, j = L.length - 1;int mid = (i + j) / 2;//int temp;while (i <= mid && j >= mid){temp = L.data[i];L.data[i] = L.data[j];L.data[j] = temp;i++;j--;}//for (int i = 0, j = L.length - 1; i < L.length / 2 && j >= L.length / 2; ++i, --j)//{//	temp = L.data[i];//	L.data[i] = L.data[j];//	L.data[j] = temp;//}
}int main03()
{Sqlist L = { {4,7,16,3,9,1}, 6 };Reverse(L);for (int j = 0; j < L.length; ++j){cout << L.data[j] << endl;}return EXIT_SUCCESS;
}

将a1,a2,a3……am b1,b2,b3……bn转换成b1,b2,b3……bn a1,a2,a3……am

#include <iostream>
using namespace std;
/*将a1,a2,a3……am b1,b2,b3……bn转换成b1,b2,b3……bn a1,a2,a3……am1、将左边的一组逆置	    am……a3,a2,a12、将右边的一组逆置                        bm……b3,b2,b13、将a1到bn所有的元素逆置  bm……b3,b2,b1 am……a3,a2,a11 2 3 4 5 6 7 8 9 103 2 1 4 5 6 7 8 9 103 2 1 10 9 8 7 6 5 4 4 5 6 7 8 9 10 1 2 3
*/
void Reverse(int A[], int m, int n)
{int mid = (m + n) / 2;for (int i = m, j = n; i <= mid; ++i, --j){int temp = A[i];A[i] = A[j];A[j] = temp;}
}void change(int A[], int m, int n)
{Reverse(A, 0, m - 1);//起始位置为0 中止位置为m-1Reverse(A, m, m + n - 1);//左半边的初始位置为m 末端为m+n-1Reverse(A, 0, m + n - 1);//右半边的初始位置为0 末端为m+n-1
}int main04()
{int A[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };change(A, 3, 7);//参数为 数组名 左边元素的个数 右边元素的个数for (int i = 0; i < 10; ++i){cout << A[i] << " ";}return EXIT_SUCCESS;
}

删除顺序表中所有值为x的元素

#include <iostream>
using namespace std;
#define maxsize 100
typedef struct
{int data[maxsize];int length;
} Sqlist;/*删除顺序表中所有值为x的元素可以把这题理解为保留所有不为x的元素12 3 5 8 9 312 5 8 9 3 3  没更新length前12 5 8 9      更新length之后
*/
void del(Sqlist &L, int x)//删除顺序表中所有值为x的元素
{int k = 0;//这里的k是用来记录顺序表中所有值不为x的元素的个数for (int i = 0; i <= L.length - 1; ++i){if (L.data[i] != x){L.data[k] = L.data[i];//覆盖操作 k和i的初始值都是0++k;}}L.length = k;//更新length 保留了所有不为x的元素 相当于删除了值为x的元素
}void Del(Sqlist &L, int x)
{int k = 0;//这里的k是用来记录顺序表中所有值为x的元素的个数for (int i = 0; i <= L.length - 1; ++i){if (L.data[i] == x)++k;elseL.data[i - k] = L.data[i];}L.length = L.length - k;
}int main05()
{Sqlist L = { {12, 3, 5, 8, 9, 3}, 6 };del(L, 3);for (int j = 0; j < L.length; ++j)cout << L.data[j] << endl;return EXIT_SUCCESS;
}

从顺序表中删除给定值再s到t之间(包括s和t)的所有元素

#include <iostream>
using namespace std;
#define maxsize 100
typedef struct
{int data[maxsize];int length;
} Sqlist;/*从顺序表中删除给定值再s到t之间(包括s和t)的所有元素12 13 14 18 19 1712          19             删除13~18
*/bool del(Sqlist &L, int s, int t)
{int  k = 0;//k是用来记数的if (L.length == 0 || s >= t)//错误的情况直接排除return false;for (int i = 0; i < L.length; ++i){if (L.data[i] >= s && L.data[i] <= t)++k;elseL.data[i - k] = L.data[i];}L.length -= k;//更新lengthreturn true;
}int main06()
{Sqlist L = { {12, 13, 15, 18, 19}, 5 };del(L, 13, 19);for (int j = 0; j < L.length; ++j)cout << L.data[j] << endl;return EXIT_SUCCESS;
}

删除有序表中所有值重复的元素

#include <iostream>
using namespace std;
#define maxsize 100
typedef struct
{int data[maxsize];int length;
} Sqlist;
/*删除有序表中所有值重复的元素可以理解为保留第一个重复的元素5 5 6 7 7 95 6 7 9
*/
bool del(Sqlist &L)
{int i, j;for (i = 0, j = 1; j < L.length; ++j)//j负责遍历整个顺序表 不满足下面的if循环时 j++{if (L.data[i] != L.data[j]){L.data[++i] = L.data[j];//满足if循环i++,j++}else{continue;}}L.length = i + 1;return true;
}int main07()
{Sqlist L = { {12, 13, 13, 13, 19}, 5 };del(L);for (int j = 0; j < L.length; ++j)cout << L.data[j] << endl;return EXIT_SUCCESS;
}

删除有序表中所有值重复的元素

 #include <iostream>
using namespace std;
#define maxsize 100
typedef struct
{int data[maxsize];int length;
} Sqlist;
/*删除有序表中所有值重复的元素可以理解为保留第一个重复的元素5 5 6 7 7 95 6 7 9
*/
bool del(Sqlist &L)
{int i, j;for (i = 0, j = 1; j < L.length; ++j)//j负责遍历整个顺序表 不满足下面的if循环时 j++{if (L.data[i] != L.data[j]){L.data[++i] = L.data[j];//满足if循环i++,j++}else{continue;}}L.length = i + 1;return true;
}int main07()
{Sqlist L = { {12, 13, 13, 13, 19}, 5 };del(L);for (int j = 0; j < L.length; ++j)cout << L.data[j] << endl;return EXIT_SUCCESS;
}

将两个递增有序表 合并为 一个递增有序表

#include <iostream>
using namespace std;
#define maxsize 100
typedef struct
{int data[maxsize];int length;
} Sqlist;/*将两个递增有序表 合并为 一个递增有序表3 7 10 18 254 9 133 4 7 9 10 13 18 25
*/bool merge(Sqlist A, Sqlist B, Sqlist &C)
{int i = 0, j = 0, k = 0;while (i < A.length && j < B.length){if (A.data[i] < B.data[j])C.data[k++] = A.data[i++];elseC.data[k++] = B.data[j++];}//一个走完了 另外一个没走完 有下面两种while (i < A.length)C.data[k++] = A.data[i++];while (j < B.length)C.data[k++] = B.data[j++];C.length = k;return true;
}int main08()
{Sqlist A = { {2, 5, 9, 13, 19}, 5 };Sqlist B = { {1, 6, 7, 10}, 4 };Sqlist C;merge(A, B, C);for (int j = 0; j < C.length; ++j)cout << C.data[j] << endl;return EXIT_SUCCESS;
}

求两个递增序列的中位数

#include <iostream>
using namespace std;
#define maxsize 100
typedef struct
{int data[maxsize];int length;
} Sqlist;/*求两个递增序列的中位数3 5 7 104 9 15 203 4 5 7 9 10 15 20 81、先合并这个两个递增序列2、求其中位数 3、若该递增序列为奇数 则返回最中间的即可 4、若该递增序列为偶数 则返回中间的左右两边的算数平均数
*/
int Find(Sqlist &A, Sqlist &B)
{int i, j, k;i = j = k = 0;Sqlist C;while (i < A.length && j < B.length)if (A.data[i] < B.data[j])C.data[k++] = A.data[i++];elseC.data[k++] = B.data[j++];while (i < A.length)C.data[k++] = A.data[i++];while (j < B.length)C.data[k++] = B.data[j++];if (C.length % 2 != 0){return C.data[(A.length + B.length - 1) / 2];}if (C.length % 2 == 0){return (C.data[(A.length + B.length - 1) / 2] + C.data[(A.length + B.length - 1) / 2 + 1])/2;}
}//法一/* int find(Sqlist &A, Sqlist &B)
{int a0 = 0, b0 = 0, am, bm, an = A.length - 1, bn = B.length - 1;while (a0 != an || b0 != bn){am = (a0 + an) / 2;bm = (b0 + bn) / 2;if (A.data[am] == B.data[bm])return A.data[am];else if (A.data[am] < B.data[bm]){a0 = a0 + bn - bm;bn = bm;}else{b0 = b0 + an - am;an = am;}}if (A.data[a0] > B.data[b0])return B.data[b0];elsereturn A.data[a0];
} //法二*/int main09()
{Sqlist A = { {3,5,7,10}, 4 };Sqlist B = { {4,9,15,20}, 4 };cout << Find(A, B) << endl;return EXIT_SUCCESS;
}

设计一个时间上尽可能高效的算法,找出数组中未出现的最小正整数

#include <iostream>
//#include<stdlib.h> malloc头文件
using namespace std;
/*设计一个时间上尽可能高效的算法,找出数组中未出现的最小正整数由题意得 时间上尽可能高效的算法,就要空间换时间数组A:    1 2 4 -6 10  数组B:    0 0 0 0  0     初始化数组B存储:1 1 0 1  0     找未出现的最小正整数 要满足1、正整数 2、未出现的 3、最小数组B不为0的索引+1表示数组A存在的数(索引理解为数组下标)第一个出现的0就是未出现的最小正整数如果数组A:1 2 3 4 5那么数组B:1 1 1 1 1
*/
int find(int A[], int n)//传入的数组和数组的长度
{int i;int *B = new int[n];//int *B = (int*)malloc(sizeof(int) * 10); C语言写法for (int k = 0; k < n; ++k){B[k] = 0;}for (i = 0; i < n; ++i){if (A[i] > 0 && A[i] <= n)//A[i]<=n代表大于数组长度的元素直接不考虑了 这里存的是这范围里面的正整数{B[A[i] - 1] = 1;}}for (i = 0; i < n; ++i){if (B[i] == 0){break;}}cout << "i=" << i;cout << endl;delete[] B;//free(B); C语言写法return i + 1;
}int main10()
{//int A[5] = { 5, -2, 1, 4, 5 };int A[5] = {1,2,3,4,5 };cout << find(A, 5) << endl;return EXIT_SUCCESS;
}

若一个整数序列中有过半相同元素,则称其为主元素设计算法找出数组A(a0,a1……an - 1)的主元素。(其中0 < ai < n)若存在主元素则输出,否则返回 - 1

#include <iostream>
using namespace std;
/*若一个整数序列中有过半相同元素,则称其为主元素设计算法找出数组A(a0,a1……an - 1)的主元素。(其中0 < ai < n)若存在主元素则输出,否则返回 - 1A:2 3 3 6 3 5 3 3B:0 1 5 0 1 1 0 03是主元素(5>8/2)1、空间换时间 堆区申请一个数组2、由于ai是小于n的 对于出现的数进行记数 出现一次+13、返回这个主元素 数组下标+1就为该元素
*/int fun(int A[], int n)//参数为数组 n为数组的长度
{int *B = new int[n];for (int i = 0; i < n; ++i) {B[i] = 0;}int i, k, max = 0;//max是用来记录B数组中最大的那个数(即A数组中出现频率最高的那个数) k是用来记录数组下标的for (i = 0; i < n; ++i) {if (A[i] > 0 && A[i] <= n) {B[A[i] - 1]++;}}for (i = 0; i < n; ++i) {if (B[i] > max){max = B[i];k = i;}}delete[] B;if (max > n / 2)//过半的元素return k + 1;elsereturn -1;
}int main11()
{int A[8] = {2,3,3,6,3,5,3,3};cout << fun(A, 8) << endl;return EXIT_SUCCESS;
}

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

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

相关文章

【六大排序详解】开篇 :插入排序 与 希尔排序

插入排序 与 希尔排序 六大排序之二 插入排序 与 希尔排序1 排序1.1排序的概念 2 插入排序2.1 插入排序原理2.2 排序步骤2.3 代码实现 3 希尔排序3.1 希尔排序原理3.2 排序步骤3.3 代码实现 4 时间复杂度分析 Thanks♪(&#xff65;ω&#xff65;)&#xff89;下一篇文章见&am…

HIve安装配置(超详细)

文章目录 Hive安装配置一、Hive安装地址二、Hive安装部署1. 把 apache-hive-3.1.2-bin.tar.gz上传到Linux的/export/software目录下2. 解压apache-hive-3.1.2-bin.tar.gz到/export/servers/目录下面3. 修改apache-hive-3.1.2-bin.tar.gz的名称为hive4. 修改/etc/profile&#x…

[python]pandas

主要内容涉及&#xff1a;读取数据和保存数据、数据详情信息、数据处理、数据切片、筛选、排序、分组、统计、表格样式 import pandas as pd import numpy as np读取数据和保存数据 # 2.1 从CSV文件读取数据,编码gbk pd.read_csv(filename, encodinggbk)# 2.2 读取前6行,当数…

【Axure高保真原型】中继器表格——移入显示详情卡片

今天和大家分享中继器表格——移入显示详情卡片的原型模板&#xff0c;鼠标移入员工姓名&#xff0c;会显示对应员工的详细卡片&#xff0c;那这个原型是用中继器制作的&#xff0c;所以使用也很方便&#xff0c;在中继器表格里维护对应的信息即可。预览时即可生成交互效果&…

MapReduce综合应用案例 — 电信数据清洗

文章目录 第1关&#xff1a;数据清洗 第1关&#xff1a;数据清洗 测试说明 平台会对你编写的代码进行测试&#xff1a; 评测之前先在命令行启动hadoop&#xff1a;start-all.sh&#xff1b; 点击测评后MySQL所需的数据库和表会自动创建好。 PhoneLog&#xff1a;封装对象 L…

用ThreeJS写了一个圣诞树

使用什么技术写 一开始我准备用htmlcss去写&#xff0c;后来感觉使用html和css写就太low了&#xff0c;没有一点点心意。就打算用three.js写一个3d版本的。 简单介绍一下threejs Three.js是一个基于原生WebGL封装运行的三维引擎&#xff0c;是最著名的3D WebGL JavaScriptTh…

SpringBoot3知识总结

SpringBoot3 1、简介 1. 前置知识 Java17Spring、SpringMVC、MyBatisMaven、IDEA 2. 环境要求 环境&工具版本&#xff08;or later&#xff09;SpringBoot3.0.5IDEA2022Java17Maven3.5 3. SpringBoot是什么 Spring Boot是Spring项目中的一个子工程&#xff0c;与我们…

第二百一十五回 如何创建单例模式

文章目录 1. 概念介绍2. 思路与方法2.1 实现思路2.2 实现方法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"分享三个使用TextField的细节"沉浸式状态样相关的内容&#xff0c;本章回中将介绍 如何创建单例模式.闲话休提&#xff0c;让我们一起Talk Flutter吧。 …

java实现局域网内视频投屏播放(三)投屏原理

常见投屏方案 常见的投屏方案主要有以下几种&#xff1a; DLNA DLNA的全称是DIGITAL LIVING NETWORK ALLIANCE(数字生活网络联盟)。DLNA委员会已经于2017年1月5日正式解散&#xff0c;原因是旧的标准已经无法满足新设备的发展趋势&#xff0c;DLNA标准将来也不会再更新。但是…

C 库函数 - mktime()

描述 C 库函数 time_t mktime(struct tm *timeptr) 把 timeptr 所指向的结构转换为自 1970 年 1 月 1 日以来持续时间的秒数&#xff0c;发生错误时返回-1。 声明 下面是 mktime() 函数的声明。 time_t mktime(struct tm *timeptr)参数 timeptr – 这是指向表示日历时间的…

Day18

Day18 一,Map 1,HashMap 1.1HashMap的使用 import java.util.Arrays; import java.util.Collection; import java.util.HashMap; import java.util.Map.Entry; import java.util.Set;public class Test01 {/*** 知识点&#xff1a;HashMap的使用*/public static void main(…

【MySQL】数据库基础入门 安装MySQL

目录 介绍&#xff1a; 安装MySQL: 设置 root 账号密码 2.配置环境变量 2.找到 Path 系统变量, 点击 "编辑" 介绍&#xff1a; MySQL是一个开源的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它是一种用于管理和存储数据的软件。 安装MySQL: …

MyBatis进行CRUD中添加数据实现主键回填

文章目录 MyBatis进行CRUD中添加数据实现主键回填1、创建一个mybatis项目2、实现添加数据时主键回填在MyBatisTest.java中添加下面方法在UserMapper.java中添加对应的属性在UserMapper.xml中添加sql语句如下运行结果如下(取消commit方法注释后就不会出现Rolling back回滚进行真…

hive数据库分区表数据迁移到另一个分区/数据复制

文章目录 一、分区表数据迁移到另一个分区表1.1、方式一1.2、方式二 二、报错解决 一、分区表数据迁移到另一个分区表 有个需求&#xff0c;创建一张备份表&#xff0c;将分区表中的数据迁移到备份表中。以下整理一下几种迁移方式。 创建分区表&#xff1a; create table use…

JRT打印元素绘制协议整合PDF

打印不光要能打印内部的单据&#xff0c;对于检验的打印还有外送回传的PDF报告也需要能够打印&#xff0c;所以需要把打印PDF文件整合进来&#xff0c;为此给打印元素绘制协议增加PDF类型的元素。 定义如下&#xff0c;由绘制协议按地址下载文件后和其他打印元素整合&#xff…

107基于matlab的模糊推理系统(ANFIS)的时间序列预测

基于matlab的模糊推理系统&#xff08;ANFIS&#xff09;的时间序列预测&#xff0c;输出训练集、测试集和预测数据结果&#xff0c;数据可更换自己的&#xff0c;程序已调通&#xff0c;可直接运行。 107 时间序列预测模糊推理系统 (xiaohongshu.com)

[ZJCTF 2019]NiZhuanSiWei1

[ZJCTF 2019]NiZhuanSiWei1 预测试 打开网页就是代码&#xff1a; <?php $text $_GET["text"]; $file $_GET["file"]; $password $_GET["password"]; if(isset($text)&&(file_get_contents($text,r)"welcome to the zjct…

金蝶云星空部署包执行后元数据对象的变化和使用

文章目录 金蝶云星空部署包执行后元数据对象的变化和使用 金蝶云星空部署包执行后元数据对象的变化和使用 部署包执行后&#xff0c;会将执行的元数据记录了部署包的版本号&#xff0c;带上改部署包的开发商标识&#xff0c;在被执行后部署包环境里只有当前开发商下的开发者才…

Android Selinux权限之MLS

MLS Selinux MLS 相关的在 国内Andoriod 官网未找到&#xff0c;只有博客的说明。 源码在 system/sepolicy/private/mls &#xff0c; 截取部分&#xff0c; # Read operations: Subject must dominate object unless the subject # or the object is trusted. mlsconstrai…