B : DS顺序表--连续操作

2023-09-22 10:14:37

Description

建立顺序表的类,属性包括:数组、实际长度、最大长度(设定为1000)

该类具有以下成员函数:

构造函数:实现顺序表的初始化。

插入多个数据的multiinsert(int i, int n, int item[])函数,实现在第i个位置,连续插入来自数组itemn个数据,即从位置i开始插入多个数据。

删除多个数据的multidel(int i, int n)函数,实现从第i个位置开始,连续删除n个数据,即从位置i开始删除多个数据。

编写main函数测试该顺序表类。

Input

第1行先输入n表示有n个数据,即n是实际长度;接着输入n个数据

第2行先输入i表示插入开始的位置,再输入k表示有k个插入数据,接着输入k个数据

第3行先输入i表示删除开始的位置,再输入k表示要删除k个数据

Output

顺序表内容包括顺序表的实际长度和数据,数据之间用空格隔开

第1行输出创建后的顺序表内容

第2行输出执行连续插入后的顺序表内容

第3行输出执行连续删除后的顺序表内容

Sample

#0
Input

Copy

6 11 22 33 44 55 66
2 3 99 88 77
4 5
Output

Copy

6 11 22 33 44 55 66 
9 11 99 88 77 22 33 44 55 66 
4 11 99 88 66 

 自己做的没有用multiinsert(int i, int n, int item[])

#include<iostream>
using namespace std;
#define ok 0
#define error -1

// 顺序表类定义
class SeqList
{
private:
    int* list;      // 元素数组
    int maxsize;    // 顺序表最大长度
    int size;       // 顺序表实际长度
public:
    SeqList();                          // 构造函数
    ~SeqList();                         // 析构函数
    int list_size();                    // 获取顺序表实际长度
    bool list_insert(int i, int item);   // 插入一个元素,参数是插入的位置  数值
    bool list_del(int i);                // 删除一个元素,参数是删除的位置
    bool list_get(int i);                // 获取一个元素,参数是获取的位置
    void list_display();                // 输出整个顺序表

   
};

SeqList::SeqList()// 构造函数
{
    maxsize = 1000;
    size = 0;
    list = new int[maxsize];
}

SeqList::~SeqList() // 析构函数
{
    delete[]list;
}

// // 获取顺序表实际长度
int SeqList:: list_size() {
    return size;
}


// 插入一个元素,参数是插入的位置 数值
bool SeqList:: list_insert(int i, int item) {
    //判断是不是合法位置i
    if (i<1 || i>size + 1)
    {
        return false;
    }
    int j = size;//list数组从0开始 所以list[size]这个位置是为空的
    for (j = size; j > i - 1; j--)
    {
        list[j] = list[j - 1];//插入就是把数组长度加一位 并且每个单位往后移一位
    }
    list[j] = item;//此时的j对于i-1 也就是在i的位置输入item数据
    size++;//数组总长要+1
    return true;
}

 // 删除一个元素,参数是删除的位置
bool  SeqList:: list_del(int i) {
    //判断是不是合法位置i
    if (i<1 || i>size + 1)
    {
        return false;
    }
    int j;
    for (j = i - 1; j < size - 1; j++)
    {  //j = i - 1 此时j的位置就是i
        list[j] = list[j + 1]; //删除就是后面的数据 把 前面一项的数据覆盖
    }
    size--;//删除 数组长度-1
    return true;
}

// 获取一个元素,参数是获取的位置
bool SeqList::list_get(int i)
{
    if(i<1 || i>size)	
				return false;
			cout<<list[i-1]<<endl;
			return true;
}

//输出列表
void SeqList:: list_display() {
    cout << size << " ";
    for (int i = 0; i < size; i++)
        cout << list[i] << " ";
    cout << endl;
}



int main()
{
    //第1行先输入n表示有n个数据,即n是实际长度;接着输入n个数据
    int n;
    cin >> n;
    //创建顺序表
    SeqList myList;
    //接着输入n个数据
    for (int i = 1; i <= n; i++)
    {
        int num1;
        cin >> num1;
        myList.list_insert(i, num1); 插入一个元素,参数是插入的位置+数值
    }
    // 输出整个顺序表
    myList.list_display();

    //第2行先输入i表示插入开始的位置,再输入k表示有k个插入数据,接着输入k个数据
    int k;
    cin >> n>>k;
    for (int i = n; i < n+k ; i++)//循环k次
    {
        int num;
        cin >> num;
        myList.list_insert(i, num);
    }
    // 输出整个顺序表
    myList.list_display();
    // 第3行先输入i表示删除开始的位置,再输入k表示要删除k个数据
    cin >> n >> k;
    for (int i = n;i<n+k;i++)//循环k次
    {
        myList.list_del(n);//永远都是删除这个下标的数据
    }
    // 输出整个顺序表
    myList.list_display();
}

用了multiinsert(int i, int n, int item[])

#include<iostream>
#include<math.h>
#include<string>

using namespace std;

#define ok 0
#define error -1

class SeqList
{
	int* list; //元素数组
	int maxsize;
	int size;
public:
	SeqList()
	{
		maxsize = 1000;
		size = 0;
		list = new int[maxsize];
	}
	~SeqList()
	{
		if (list != NULL)
			delete[]list;
	}
	int list_size();  //获取顺序表的实际长度
	int list_insert(int i, int item); //插入一个元素
	int list_del(int i);
	int list_get(int i);
	void list_display();
	//插入多个数据的multiinsert(int i, int n, int item[])函数,
	//实现在第i个位置,连续插入来自数组item的n个数据,即从位置i开始插入多个数据。
	void multiinsert(int i, int n, int item[])
	{
		for (int p = 0; p < n; p++)
		{
			list_insert(i + p, item[p]);//插入是不断往后插 所以p要变化
		}
	}
	//删除
	void multidel(int i, int n)
	{
		for (int p = 0; p < n; p++)
		{
			list_del(i + 1);//删除每次都是i+1那个位置被删 所以选择定值i
		}
	}
};
int SeqList::list_size()
{
	return size;
}
int SeqList::list_insert(int i, int item)
{
	if (i<1 || i>size + 1)
	{
		return -1;
	}
	for (int q = size; q > i - 1; q--)
	{
		if (q > 0)
			list[q] = list[q - 1];
	}
	list[i - 1] = item;
	size++;
	return ok;
}
int SeqList::list_del(int i)
{
	if (i<1 || i>size + 1)
	{
		return -1;
	}
	//if (i != size)
	//{
	for (int q = i - 1; q < size; q++)
	{
		if (q > 0)
			list[q - 1] = list[q];
	}
	//}
	size--;
	return ok;
}
int SeqList::list_get(int i)
{
	if (i<1 || i>size + 1)
	{
		return -1;
	}
	return list[i - 1];
}
void SeqList::list_display()
{
	cout << size << " ";
	for (int i = 0; i < size; ++i)
	{
		cout << list[i] << " ";
	}
	cout << endl;
}

int main(void)
{
	int n;
	cin >> n;
	SeqList p;
	int number[128];
	for (int i = 0; i < n; ++i)
	{
		cin >> number[i];
	}
	p.multiinsert(1, n, number);
	p.list_display();
	int i;
	cin >> i >> n;
	for (int i = 0; i < n; ++i)
	{
		cin >> number[i];
	}
	p.multiinsert(i, n, number);
	p.list_display();
	cin >> i >> n;
	p.multidel(i, n);
	p.list_display();
	return 0;
}

小结:二者的核心思路都是一样的 只是有没有封装成函数

插入时候 下标要不断往后移

删除 下标不变

更多推荐

汽配制造问题以及MES管理系统解决方案

在汽车工业中,零部件制造与整车制造有着显著的不同。这些差异导致了零部件制造的复杂性和高要求,使其成为一个高度综合的最终产品。本文将详细介绍这些差异以及针对这些差异的解决方案。一、行业特点决定需求汽车配件制造与整车制造存在较大不同。在整车制造过程中,装配是最复杂的环节,而在零部件制造过程中,装配所占的比重较小,机加等前端

XSS跨站脚本攻击

XSS全称(CrossSiteScripting)跨站脚本攻击,XSS属于客户端攻击,受害者最终是用户,在网页中嵌入客户端恶意脚本代码,最常用javascript语言。(注意:叠成样式表CSS已经被占用所以叫XSS)原因:输入没过滤,输出没编码。危害:劫持用户cookie,钓鱼,挂马分类:1、反射性XSS(中危,一次性

肖sir__项目环境之全流程__005

一、测试流程(h模型)1、需求文档(产品)需求文档(软件需求规格说明书srs)(1)如何分析需求a、显示需求(主流程、功能,业务)b、隐性需求(比如:红包记录,扣款金额=发送金额)c、特殊需求(计算:保费计算,还款计算)d、关联需求(满减活动:活动订单,活动增加,)(2)需求特殊a、完整性:功能的实现和设计信息齐全b、

API接口:概述、设计、应用与未来趋势

一、API接口概述API,全称应用程序接口,是一种软件程序之间的通信方法。API接口在互联网开发中扮演着重要角色,允许不同的应用程序相互交流和共享数据。API定义了一套标准的通信协议,使得开发人员能够使用特定的函数、方法或协议来交换信息。二、API接口设计RESTfulAPIRESTfulAPI是当前最流行的一种API

【SpringMVC】自定义注解与AOP结合使用

目录一、SpringMVC之自定义注解1.1Java注解简介1.2为什么要用注解1.3注解的分类⭐1.3.1JDK基本注解1.3.2JDK元注解1.3.3自定义注解1.4自定义注解三种使用案例1.4.1案例一(获取类与方法上的注解值)1.4.2案例二(获取类属性上的注解属性值)1.4.3案例三(获取参数修饰注解对应的属

吉时利KEYSIGHT6517B静电计6517A高阻计

Keithley6517B静电计/高阻计是灵敏测量的全球研究实验室标准。吉时利静电计拥有60多年的低电平测量专业知识,可提供低至10aA(10×10-18A)的电流水平和低至1fC的电荷水平的可靠测量,以及高达1018Ω的最高电阻测量。6517B还能够测量最大电压范围(高达200V),输入阻抗超过200TO。特征测量高

EPLAN_001#常用功能(一)

一、栅格设置、背景颜色设置二、插入设备图标(快捷键Insert)按TAB旋转方向三、¶通过左CTRL+ENTER输入四、移动属性文本、复制格式CTRL+B可以移动设备图形中的相关文本(或者右键—文本—移动属性文本)很对多个文本的,可以取消其固定五、改变方向(属性中选择相应的变量)六、直接编辑(可以快速修改元器件名称)七

蓝牙核心规范(V5.4)10.2-BLE 入门笔记之CIS篇

LECIS同步通信同步通信提供了一种使用蓝牙LE在设备之间传输有时间限制的数据的方式。它提供了一个机制,允许多个接收器设备在不同的时间从相同的源接收数据,以同步它们对该数据的处理。LEAUDIO使用同步通信。当使用同步通信时,数据具有有限的时间有效期,在到期时被认为已过期。尚未传输的过期数据将被丢弃。这意味着设备只接收

AI 与大模型引新安全威胁?亚马逊云科技与领创集团的探索和实践

出品|CSDN云计算作为数字化底座,疫情后的安全需求仍在增长。据统计,2023年上半年国内GDP增速为5.4%,其中网络安全市场规模增长10%。另一面,今年爆火的AIGC与大模型,也在被攻击者利用,演化出新型的诈骗与攻击手段。在亚马逊云科技re:Inforce2023中国站上,领创集团信息安全总监赵海旭分享了AI与大模

大数据面试题:Flink延迟数据是怎么解决的

最近朋友面试某猪的时候,被问到一个问题答得面试官不太满意,问的是前司数据延迟问题是怎么解决的,我稍作整理。一、什么是延迟数据大数据处理过程中Join的场景太多太多了,几乎所有公司的APP都会涉及到两条流数据之间的维度拼接,将表变宽等场景,避免不了进行多流Join操作。同时join场景中受网络或物理设备等因素影响也有可能

184_Python 在 Excel 和 Power BI 绘制堆积瀑布图

184_Python在Excel和PowerBI绘制堆积瀑布图一、背景在2023年8月22日微软Excel官方宣布:在Excel原生内置的支持了Python。博客原文笔者第一时间就更新到了Excel的预览版,通过了漫长等待分发,现在可以体验了,先来看看效果。在Excel公式选项卡下Python菜单原来的Excel公示栏

热文推荐