数据结构实验1(顺序表逆置以及删除)

数据结构实验一 线性表(顺序表单链表逆置及单链表分解) 一、 实验目的 1. 熟悉线性表的顺序和链式存储结构 2. 掌握线性表的基本运算 3. 能够利用线性表的基本运算完成线性表应用的运算 二、 实验内容 1. 设有一个线性表E={e1, e2, … , en-1, en},设计一个算法,将线性表逆置,即使元素排列次序颠倒过来,成为逆线性表E’={ en , en-1 , … , e2 , e1 },要求逆线性表占用原线性表空间, 阅读详情

在顺序表类SeqList中增加成员函数void Reverse(),实现顺序表的逆置。

在顺序表类SeqList中增加成员函数bool DeleteX(const T &x),删除表中所有元素值等于x的元素。若表中存在这样的元素,则删除

之,且函数返回true。否则函数返回false。


直接在SeqList类增加两个成员函数完成相应功能,逆置的话用到了stl中的栈,原elements入栈后紧着着赋值覆盖原来的元素值就实现

了逆置。删除所有等于x的元素则扫一遍顺序表,若找到等于x的元素就调用Delete()函数,最后比较原长度以及现长度就知道有没有删

除成功。


实现代码:

#include "iostream"
#include "cstdio"
#include "cstring"
#include "algorithm"
#include "stack"
using namespace std;
template <class T>
class LinearList
{
public:
	virtual bool IsEmpty() const = 0; // 为空则返回true
	virtual int Length() const = 0; // 返回长度
	virtual bool Find(int i, T &x) const = 0; // 若a[i]存在则x = a[i],返回true,不存在返回flase
	virtual int Search(T x) const = 0; // 若存在等于x的元素则返回下标,否则返回-1
	virtual bool Insert(int i, T x) = 0; // i == -1则x插在第一个元素之前, 否则x插在a[i]后,插入成功返回true
	virtual bool Delete(int i) = 0; // 删除元素a[i],删除成功返回true
	virtual bool Update(int i, T x) = 0; // 修改元素a[i]为x,若修改成功则返回true
	virtual void Output(ostream &out) const = 0;
	/* data */
protected:
	int n;
};
template <class T>
class SeqList:public LinearList<T>
{
public:
	SeqList(int mSize);
	~SeqList() {delete []elements;}
	bool IsEmpty() const;
	int Length() const;
	bool Find(int i, T &x) const;
	int Search(T x) const;
	bool Insert(int i, T x);
	bool Delete(int i);
	bool Update(int i, T x);
	void Output(ostream &out) const;
	void Reverse(); // 顺序表的逆置
	bool DeleteX(const T &x); // 删除表中所有等于x的元素,成功则返回true
	/* data */
private:
	int maxLength, n;
	T *elements;
};
template <class T>
SeqList<T>::SeqList(int mSize)
{
	maxLength = mSize;
	elements = new T[maxLength];
	n = 0;
}
template <class T>
bool SeqList<T>::IsEmpty() const
{
	return n == 0;
}
template <class T>
int SeqList<T>::Length() const
{
	return n;
}
template <class T>
bool SeqList<T>::Find(int i, T &x) const
{
	if(i < 0 || i > n - 1) { // i不合法
		cout << "Out of Bounds" << endl << endl;
		return false;
	}
	x = elements[i];
	return true;
}
template <class T>
int SeqList<T>::Search(T x) const
{
	for(int i = 0; i < n; ++i)
		if(elements[i] == x) return i;
	return -1;
}
template <class T>
bool SeqList<T>::Insert(int i, T x)
{
	if(i < -1 || i > n - 1) { // i不合法
		cout << "Out of Bounds" << endl << endl;
		return false;
	}
	if(n == maxLength) { // 数组满了
		cout << "OverFlow" << endl << endl;
		return false;
	}
	for(int j = n - 1; j > i; --j)
		elements[j + 1] = elements[j];
	elements[i + 1] = x;
	n++;
	return true;
}
template <class T>
bool SeqList<T>::Delete(int i)
{
	if(!n) { // 数组已经为空
		cout << "UnderFlow" << endl << endl;
		return false;
	}
	if(i < 0 || i > n - 1) { // i不合法
		cout << "Out of Bounds" << endl << endl;
		return false;
	}
	for(int j = i + 1; j < n; ++j)
		elements[j - 1] = elements[j];
	n--;
	return true;
}
template <class T>
bool SeqList<T>::Update(int i, T x)
{
	if(i < 0 || i > n - 1) { // i不合法
		cout << "Out of Bounds" << endl << endl;
		return false;
	}
	elements[i] = x;
	return true;
}
template <class T>
void SeqList<T>::Output(ostream &out) const
{
	for(int i = 0; i < n; ++i)
		out << elements[i] << " ";
	out << endl << endl;
}
template <class T>
void Union(SeqList<T> &A, SeqList<T> &B)
{
	T x;
	for(int i = 0; i < B.Length(); ++i) {
		B.Find(i, x);
		if(A.Search(x) == -1) A.Insert(A.Length() - 1, x);
	}
}
template <class T>
void SeqList<T>::Reverse()
{
	stack<T> s;
	for(int i = 0; i < n; ++i)
		s.push(elements[i]);
	for(int i = 0; i < n; ++i) {
		elements[i] = s.top();
		s.pop();
	}
	cout << "转置成功" << endl;
}
template <class T>
bool SeqList<T>::DeleteX(const T &x)
{
	int flag = n;
	for(int i = 0; i < n; ++i)
		if(elements[i] == x) {
            Delete(i);
            i--;
        }
	if(flag != n) return true;
	return false;
}
int main(int argc, char const *argv[])
{
	SeqList<int> A(20), B(20);
	for(int i = 0; i < 5; ++i)
		A.Insert(i - 1, i); // A = {0, 1, 2, 3, 4}
	cout << "顺序表A为:" << endl;
	A.Output(cout);

	for(int i = 5; i < 10; ++i)
		B.Insert(i - 6, i); // B = {5, 6, 7, 8, 9}
	cout << "顺序表B为:" << endl;
	B.Output(cout);

	A.Update(1, 5); // A = {0, 5, 2, 3, 4}
	cout << "更新后顺序表A为:" << endl;
	A.Output(cout);

	int flag = A.Search(2); // 元素中是否有2
	if(flag != -1) cout << "有等于2的元素" << endl;
	else cout << "无等于2的元素" << endl;

	int x;
	A.Find(2, x); // x = a[2];
	cout << "a[2] == " << x << endl;

	B.Insert(-1, 0); // B = {0, 5, 6, 7, 8, 9}
	cout << "插入0后顺序表B为:" << endl;
	B.Output(cout);

	B.Insert(3, 2); // B = {0, 5, 6, 7, 2, 8, 9}
	cout << "插入2后顺序表B为:" << endl;
	B.Output(cout);

	B.Delete(4); // B = {0, 5, 6, 7, 8, 9}
	cout << "删除4后顺序表B为:" << endl;
	B.Output(cout);

	Union(A, B); // 合并A, B到A  A = {0, 2, 3, 4, 5, 6, 7, 8, 9}
	cout << "合并A,B到A后顺序表A为:" << endl;
	A.Output(cout);

	B.Reverse(); // B = {9, 8, 7, 6, 5, 0};
	cout << "转置后顺序表B为:" << endl;
	B.Output(cout);

    B.Insert(-1, 9);
    cout << "插入9后顺序表B为:" << endl;
	B.Output(cout);

    x = 9;
	if(B.DeleteX(x)) cout << "删除表中x成功" << endl;
	else cout << "表中无等于x的元素" << endl;
	cout << "顺序表B为:" << endl;
	B.Output(cout);
	return 0;
}




《数据结构》实验一报告(单链表的就地反转) 实验内容:(一)单链表的就地反转 一、目的和要求(需求分析): 1、掌握数据的链式存储结构以及链表的建立和操作。 2、利用链表的原空间进行链表的反转; (设计一个将输入数据建立成链表、并依次输出链表数据、利用原空间把链表反转的程序。) 二、程序设计的基本思想,原理和算法描述: 1.新建单链表 2.依次输出单链表的结点值 3.就地反转 4.打印反转后的链表L 5.摧毁单链表 逆置操作使p,q两个指针... 阅读详情

相关推荐

Sdut PTA 21级数据结构与算法实验1——顺序表(C语言版)

读入n值及n个整数,建立顺序表并遍历输出。

sky_kin的博客 6690

从顺序表L中删除所有元素值介于x和y之间的所有元素

从顺序表L中删除所有元素值介于x和y之间的所有元素。对于顺序表来讲,数据是被存储在一段连续的内存中的,所以删除元素时不能像链表那样直接将要删除的元素跳过,然后将要删除元素所在空间释放,那我们要怎么做才能达到将元素删除的效果呢? 我们一步一步来思考,首先要明确我们的目标,就是将某些符合要求的元素删除。好的,现在在我们内存中有一排空间,首先找到要删除的元素,找到之后我们把它“擦除”,现在被“擦除”的空间是没有放置任何数据的,为了保证顺序表存储的连续性,我们要将后面的元素向前移动,这样就又符合顺序表的存储结构了

qq_69426354的博客 1930

删除顺序表中值相同的多余元素

设计并验证一下算法:设顺序表L中的数据元素为整数且非递增有序,删除其值相同的多余元素,即顺序表L中相同的元素只保留一个,并逆置删除后的顺序表L。(1)根据键盘输入数据建立顺序表L。(2)输出顺序表L、删除值相同的多余元素后的顺序表L、逆置的顺序表L。(3)假设顺序表L长度为n,要求以O(n)的时间复杂度完成对值相同多余元素的删除。实验代码#include &lt;stdio.h&gt; #incl...

木木夕的博客 1万+

南邮数据结构实验1 顺序表操作

实验内容和提示: 1.在顺序表类SeqList中增加成员函数void Reverse(),实现顺序表的逆置。 2.在顺序表类SeqList中增加成员函数bool DeleteX(const T &x),删除表中所有元素值等于x的元素。若表中存在这样的元素,则删除之,且函数返回true;否则函数返回false。 3.编写main函数,调用上述新增函数。 4.提示:创建LinearLi

Tc的专栏 6355

scau 数据结构实验一 8578 顺序表逆置

Description 顺序表的基本操作代码如下: #include<stdio.h> #include<malloc.h> #define OK 1 #define ERROR 0 #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 #define ElemType int typedef int Status; typedef struct { int *elem; int length; int

qq_61974198的博客 631

C#中的Chart控件——当数据源很多时可以显示进度条拉动观察,也可以记录到后台文本详细对照

C#中的Chart控件——当数据源很多时可以显示进度条拉动观察,也可以记录到后台文本详细对照下面进行详细步骤说明,感兴趣的同学可以看一下: 1简单示例(一条线): 2.数据源随着时间不断变化,进度条变化 。多条线: 3.看在整段时期内的数据大体图(消去或出现)进度条: 4.后台将时刻记录变化记录到一个txt文本里以供详细校验: 话不多说上码: using System; using Sys...

帅boy的博客 4308

线性表逆置实验报告

课程设计题目:线性表逆置实验 一、问题描述 试分别以顺序表和单链表作存储结构,各写一实现线性表就地逆置的算法。 二、基本要求 逆置线性表。 就地(空间复杂度至多O(1)O(1)O(1))。 三、概要设计 1. 数据结构的设计 依题目要求,本实验采用顺序表和单链表。 2. 算法的设计 对于顺序表的逆置,我们使用两个指针i和j,分别从左到右和从右到左扫描,交换元素,直到相遇。 伪代码如下 void reverse() { for (int i = 0, j = length - 1, t; i &l

Shudderwock 的博客 1712

Crawl4AI实战:5分钟搞定电商价格监控爬虫(附Python代码)

本文详细介绍了如何利用开源AI网络爬虫框架Crawl4AI快速构建电商价格监控系统。通过Python实战代码,展示了从环境配置、智能内容提取到多平台适配、定时任务与数据可视化的完整流程,帮助运营人员和技术开发者高效实现自动化价格追踪与竞品分析。

weixin_29090917的博客 414

Java顺序表的就地逆置算法

Java顺序表的就地逆置算法 假设已经定义有顺序表类SequenceList,该类中定义了表的相关操作方法,试编写程序实现顺序表的就地逆置算法,即在原表的存储空间将顺序表(a1,a2,a3,…,an)逆置为(an,an-1,…,a1)。 import java.util.ArrayList; import java.util.List; public class SequenceList&l...

5893

LVGL项目内存告急?试试把中文字库放到SD卡里(基于LvglFontTool V0.5)

本文详细介绍了在LVGL嵌入式项目中如何通过将中文字库存储到SD卡来优化内存使用。针对Flash资源有限的MCU,如STM32F103,提供了基于LvglFontTool V0.5的外部字库生成与动态加载方案,适用于多字号、多语言及OTA场景,显著减少固件体积并提升显示灵活性。

weixin_33726318的博客 456

C语言编写Picard迭代和牛顿迭代法

为了完成学校计算方法的作业,花了两个多星期将所有实验报告编写出来,看到同桌找代码的辛苦,优快云也没有这类代码,我只是一时兴起,想分享我写的代码与大家共飨,有错误还请多多指正,代码都不难,也是为了让优快云帮我保存下,我辛辛苦苦做出来的,倘若能给别人带来一丝一毫的帮助,我都万分荣幸。 1:什么是Picard迭代 先弄一个满足f(x) = 0的函数将其转化为x= 正在上传… 重新上传 取消 ...

mohenxiang的博客 4699

顺序表的编程题及完整代码(顺序表逆置、删除、合并、查找等)

文章目录顺序表逆置将循序表L中的所有元素逆置将两个顺序表的位置互换删除操作删除顺序表L中所有值为x的数据元素删除有序顺序表L中所有值重复的元素合并操作将两个有序顺序表合并成一个新的有序顺序表查找操作找两个等长升序序列的中位数说明 顺序表逆置 将循序表L中的所有元素逆置 问题描述: 将顺序表L的所有元素逆置,要求算法的空间复杂度为O(1)。 算法思想: 扫描顺序表L的前半部分元素,对于元素L.data[i](0<=i<L.length/2),将其与后半部分对应元素L.data[L.length-1

薛定谔的猫的博客 4698

Jetson工业级应用指南:用Orin NX 16GB打造多摄像头AI质检系统

本文详细介绍了如何利用NVIDIA Jetson Orin NX 16GB构建高效的多摄像头AI质检系统,涵盖硬件选型、软件优化及产线部署全流程。通过100 TOPS的AI算力和多路视频处理能力,Orin NX在工业4.0时代展现出卓越的实时缺陷检测性能,特别适合嵌入式AI应用场景。

Pepper的专栏 307

数据结构(一)顺序表2:顺序表的就地逆置和顺序表中删除元素值

问题一:  实现顺序表的就地逆置,即利用原表的存储空间将线性表(a1,a2,…,an),逆置为(an,an-1,…,a1)。 1.顺序表的全部逆置 设一个临时变量,将顺序表逆置 //顺序表的全部逆置 void reverse_list(Sqlist &L) { //就地逆置,设一个临时变量,将顺序表逆置 int i=0,j,k; for(j=L.length

___cc木槿 4032

反应动力学仿真软件:Kintecus_(11).数据输入与输出解析

在反应动力学仿真软件的二次开发中,数据输入与输出解析是至关重要的步骤。正确地解析输入数据和生成输出结果不仅能够确保仿真过程的顺利进行,还可以提高仿真的准确性和效率。本节将详细介绍如何在仿真软件中实现数据输入与输出的解析,包括文件格式、数据结构、解析方法以及实际操作示例。

kkchenjj的博客 757

【AI就业干货12】机器学习八股文速通:从损失函数到 XGBoost,一篇带走全部面试点

本文总结了机器学习面试的核心知识点,涵盖监督与非监督学习、线性模型、正则化、决策树、KNN/K-means、SVM、集成学习、梯度下降、评估指标、特征工程、降维、概率模型等内容。重点包括:损失函数选择(MSE/交叉熵)、正则化作用(L1稀疏/L2平滑)、决策树划分准则、集成学习方法(Bagging降方差/Boosting降偏差)、XGBoost优化等。提供了30秒速记口诀和XGBoost代码示例,帮助快速掌握面试要点。全文采用公式+代码+口诀的形式,系统梳理了机器学习从理论到实践的常见考点。

m0_51738372的博客 731

8578 顺序表逆置

SCAU数据结构OJ习题第一章8578 顺序表逆置

callmeggyh的博客 973

41、矩形和圆柱形开槽微带贴片天线设计及性能分析

本文提出了一种适用于ISM频段(2.4 - 2.48 GHz)的微带圆形贴片天线,专为生物医学植入和可穿戴设备设计。通过在贴片上蚀刻矩形槽并去除圆柱形槽,实现了小型化与性能优化。采用Rogers 3010基板材料,结合缺陷接地结构(DGS)技术,有效改善了带宽、回波损耗和极化纯度。仿真结果显示,天线在弯曲状态下仍保持良好性能,回波损耗达-13 dB,VSWR为1.6,方向性提升至5.38 dB。与以往设计相比,本次设计在回波损耗和谐振频率稳定性方面表现优异,具备良好的生物相容性和应用潜力。未来将从开槽结构、

github5actions的博客 258

数据结构 实验一 顺序表的操作

一、顺序表的操作 任务:初始化一个顺序表并输出。 相关知识: 需要掌握: 1.结构体变量初始化 2.如何遍历顺序表。 结构体变量初始化: 定义结构体变量的同时,给结构体变量的各个成员变量赋值。 示例如下: sequenlist sq={{1,3,6,7},3}; {1,3,6,7}是给结构体中的数组赋值, 3.给成员变量 last 赋值 遍历顺序表: 给定一个顺序表L,从0~L->last,依次输出,就可以遍历完顺序表中的所有元素。 其中L是指向顺序表的指针。 示例如下: void listprint

TXYGoodluck的博客 8557

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【数据结构】顺序表

顺序表示一种最为简单的线性结构,可以分为两种,一种是静态顺序表,一种是动态顺序表 1)静态顺序表 所谓静态顺序表是指一旦定义了该表,其大小始终固定不变,函数调用时,静态顺序表在函数栈上开辟空间,我们熟悉的数组就是一种静态顺序表 e.g #definde MAXSIZE 100 ElemType Sqlist[MAXSIZE]; int len; 2)动态顺序表 所谓动态顺序表...

无意呢的博客 5877

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

顺序表逆置,链表逆置

顺序表逆置真题: 1.将一长度为n的数组的前端k(k<n)}个元素逆置后移动到数组后端,要求原数组中数据不丢失; 2.将一长度为n的数组的前端k(k<n)个元素保持原序移动到数组后端,要求原数组中数据不丢失; 3.将数组中的元素(Xo, X1, ... Xn-1),经过移动后变为:(Xp, Xp+1, ...Xn-1, Xo, X1, ..Xp-1) ,即循环左移p(0<p...

知且行的博客 1935

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

数据结构--线性表的销毁,逆置

c语言进行多次输入时可采用EOF来实现 while(scanf("%c%c%c",&ah,&ch,&bh)!=EOF)//进行多次输入用EOF

fly 7999

【数据结构】单链表就地逆置算法C语言

单链表就地逆置算法程序样例 在C语言中为了减少时间和空间,对单链表采用就地逆置的方法,话不多说,完整代码如下。 #include<stdio.h> #include<malloc.h> #define LEN sizeof (struct Node) struct Node { int data;//定义数据域 struct Node *next;//定义指针域 int length;//记录顺序表的长度 }; //建立动态链表 struct Node *crt_list(

九芒星的博客 9776

数据结构第二章线性表(一)①顺序表插入并递增有序(已知顺序表L中的元素递增有序排列,设计算法将元素x插入到表L中并保持表L仍递增有序)②删除顺序表元素③顺序表逆置

文章目录1、顺序表插入并递增有序已知顺序表L中的元素递增有序排列,设计算法将元素x插入到表L中并保持表L仍递增有序。2、删除顺序表元素在顺序表中删除所有元素值为x的元素,要求空间复杂度为O(1)。3、顺序表逆置以顺序表存储非空线性表,编写一个实现线性表就地逆置的算法。空间复杂度均是O(1)。 1、顺序表插入并递增有序 已知顺序表L中的元素递增有序排列,设计算法将元素x插入到表L中并保持表L仍递增有序。 /*顺序表插入并递增有序 已知顺序表L中的元素递增有序排列,设计算法将 元素x插入到表L中并保持表L仍递增

Happy_change的博客 1万+

SCAU 8578 顺序表逆置

8578 顺序表逆置 时间限制:1000MS 代码长度限制:10KB 提交次数:3660 通过次数:2149 题型: 编程题 语言: G++;GCC Description 顺序表的基本操作代码如下: #include<stdio.h> #include<malloc.h> #define OK 1 #define ERROR 0 #define LIST_INIT_...

Maoxim的博客 1087
上一篇: HDOJ2087 剪花布条(kmp)
下一篇: 数据结构实验1(一元多项式的相加和相乘)
GKHack
博客等级 码龄11年 48粉丝 291原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值