数据结构与算法实验-实验一:线性表基本操作

2023-11-14

线性表基本操作

题目1

线性表是最常见和常用的ADT。假设线性表的元素为整数,请基于顺序存储结构实现线性表ADT。
基本功能包括:
(1)建立线性表;
输入有两行,第一行是一个整数n,线性表的长度; 第二行是n和数据元素
(2)插入:
输入两个整数,即元素插入的位置和元素值
(3)删除:
输入一个整数,即要删除的元素
(4)搜索:
输入一个整数,即搜索元素的值
(5)输出:
输出线性表的各个元素,空格分开。
(6)集合的并运算:
输入创建第二个集合(线性表),完成并运算
(7)集合的交运算:
输入创建第二个集合(线性表),完成交运算
(8)合并两个有序线性表:
两个有序线性表,合并后仍然有序
测试数据:
5 //线性表A的长度
1 3 5 7 9 //线性表A的数据
2 10 //表示在第2个位置插入10
10 //表示删除值=10的数据元素
9 //查找元素9
22 / /查找元素22
6 //线性表B的长度
1 2 3 4 5 6
例如:
输入:
5
1 3 5 7 9
2 10
10
9
22
6
1 2 3 4 5 6
输出:
A is created as: 1 3 5 7 9
After inserted A is 1 10 3 5 7 9
After deleted A is 1 3 5 7 9
9 is located at index of 5
22 is not found
B is created as: 1 2 3 4 5 6
A cross B is 1 3 5
A union B is 1 3 5 7 9 2 4 6
A union B in sequence is 1 2 3 4 5 6 7 9
这个题不知道是不是题目不全,第一眼看到的时候一脸懵逼,最后发现,其实就是按照题目给出的样例模拟就行:(1)输入n后,再输入n个数,建立A线性表;(2)输入两个数i和j,表示在A表的第i个位置插入数字j;(3)输入一个数num,在A中删除num;(4)输入两个数,分别寻找其位置;(5)输入m后,再输入m个数,建立A线性表;(6)输出(A并B)的结果;(7)输出(A或B)的结果;(8)从小到大的输出(A或B)的结果。

#pragma GCC optimize(3,"Ofast","inline")
#pragma G++ optimize(3)
#include <bits/stdc++.h>
#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
#include <sstream>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<ll,ll> pll;
typedef pair<int,int> pii;
typedef queue<int> q_i;
typedef queue<string> q_s;
typedef queue<double> q_d;
typedef queue<ll> q_ll;
typedef queue<char> q_c;
typedef priority_queue<int> pq_i;
typedef priority_queue<string> pq_s;
typedef priority_queue<double> pq_d;
typedef priority_queue<ll> pq_ll;
typedef stack<int> s_i;
typedef stack<string> s_s;
typedef stack<double> s_d;
typedef stack<ll> s_ll;
typedef stack<char> s_c;
typedef map<ll,ll> m_ll_ll;
typedef map<int,ll> m_i_ll;
typedef map<string,ll> m_s_ll;
typedef map<char,int> m_c_i;
typedef map<char,ll> m_c_ll;
#define rep(i,l,r) for(ll i=l;i<=r;i++)
#define per(i,l,r) for(ll i=r;i>=l;i--)
#define eif else if
#define N 105
#define mm(dp) memset(dp,0,sizeof(dp))
#define mm1(dp) memset(dp,-1,sizeof(dp))
#define mm2(dp) memset(dp,0x3f,sizeof(dp))
#define IT set<int>::iterator
const double e=2.71828182845;
const double pi = acos(-1.0);
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int n;
    cin>>n;
    int a[n+5];
    rep(i,1,n)
    {
        cin>>a[i];
    }
    cout<<"A is created as:";
    rep(i,1,n)
    {
        cout<<" "<<a[i];
    }
    cout<<'\n';
    int index,num;
    cin>>index>>num;
    per(i,index+1,n+1)
    {
        a[i]=a[i-1];
    }
    a[index]=num;
    cout<<"After inserted A is";
    rep(i,1,n+1)
    {
        cout<<" "<<a[i];
    }
    cout<<'\n';
    int num1;
    cin>>num1;
    int flag=0;
    rep(i,1,n+1)
    {
        if(num1==a[i])
        {
            flag=i;
            break;
        }
    }
    rep(i,flag,n+1)
    {
        a[i]=a[i+1];
    }
    cout<<"After deleted A is";
    rep(i,1,n)
    {
        cout<<" "<<a[i];
    }
    cout<<'\n';
    int num2;
    cin>>num2;
    cout<<num2<<" ";
    flag=0;
    rep(i,1,n)
    {
        if(num2==a[i])
        {
           flag=i;
           break;
        }
    }
    if(flag!=0)
        cout<<"is located at index of "<<flag<<'\n';
    else
        cout<<"is not found"<<'\n';
    int num3;
    cin>>num3;
    flag=0;
    cout<<num3<<" ";
    rep(i,1,n)
    {
        if(num3==a[i])
        {
           flag=i;
           break;
        }
    }
    if(flag!=0)
        cout<<"is located at index of "<<flag<<'\n';
    else
        cout<<"is not found"<<'\n';
    int m;
    cin>>m;
    int b[m+5];
    rep(i,1,m)
    {
        cin>>b[i];
    }
    cout<<"B is created as:";
    rep(i,1,m)
    {
        cout<<" "<<b[i];
    }
    cout<<'\n';
    cout<<"A cross B is";
    rep(i,1,n)
    {
        rep(j,1,m)
        {
            if(a[i]==b[j])
            {
                cout<<" "<<a[i];
                break;
            }
        }
    }
    cout<<'\n';
    cout<<"A union B is";
    int c[n+m+5];
    int k=1;
    rep(i,1,n)
    {
        cout<<" "<<a[i];
        c[k]=a[i];
        k++;
    }
    rep(i,1,m)
    {
        int u=0;
        rep(j,1,n)
        {
            if(b[i]==a[j])
            {
                u=1;
                break;
            }
        }
        if(u==0)
        {
            c[k]=b[i];
            k++;
            cout<<" "<<b[i];
        }
    }
    k--;
    cout<<'\n';
    cout<<"A union B in sequence is";
    sort(c+1,c+1+k);
    rep(i,1,k)
    {
        cout<<" "<<c[i];
    }
    cout<<'\n';
    return 0;
}

题目2

线性表是最常见和常用的ADT。假设线性表的元素为整数,请基于单链式存储结构实现线性表ADT。
基本功能包括:
(1)建立线性表;
输入有两行:第一行一个整数,是输入元素的结束标志,例如0,则在输入结束时输入0,就表示输入结束了。
第二行是线性表的各个元素,最后一个是结束标志。
(2)插入:
输入两个整数,即元素插入的位置和元素值
(3)删除:
输入一个整数,即要删除的元素值
(4)搜索:
输入一个整数,即要搜索元素的值
(5)输出:
输出线性表的各个元素,空格分开。
(6)集合的并运算:
输入创建第二个集合(线性表),完成并运算
(7)集合的交运算:
输入创建第二个集合(线性表),完成交运算
(8)合并两个有序线性表:
两个有序线性表,合并后仍然有序
测试数据:
测试样例:
0 //线性表输入结束标志
1 3 5 7 9 0 //线性表A的各个元素,最后是结束标志
2 10 //表示在第2个位置插入10
10 //表示删除值=10的数据元素
9 //查找元素9
22 // 查找元素22
0 //线性表输入结束标志
1 2 3 4 5 6 0 //线性表B的各个元素,最后是结束标志
例如:
输入:
0
1 3 5 7 9 0
2 10
10
9
22
0
1 2 3 4 5 6 0
输出:
A is created as: 1 3 5 7 9
After inserted A is 1 10 3 5 7 9
After deleted A is 1 3 5 7 9
9 is located at index of 5
22 is not found
B is created as: 1 2 3 4 5 6
A cross B is 1 3 5
A union B is 1 3 5 7 9 2 4 6
A union B in sequence is 1 2 3 4 5 6 7 9
这个和上一个题差不多,只是把创建线性表时的输入变了一下,相应的变一下即可。

#pragma GCC optimize(3,"Ofast","inline")
#pragma G++ optimize(3)
#include <bits/stdc++.h>
#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
#include <sstream>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<ll,ll> pll;
typedef pair<int,int> pii;
typedef queue<int> q_i;
typedef queue<string> q_s;
typedef queue<double> q_d;
typedef queue<ll> q_ll;
typedef queue<char> q_c;
typedef priority_queue<int> pq_i;
typedef priority_queue<string> pq_s;
typedef priority_queue<double> pq_d;
typedef priority_queue<ll> pq_ll;
typedef stack<int> s_i;
typedef stack<string> s_s;
typedef stack<double> s_d;
typedef stack<ll> s_ll;
typedef stack<char> s_c;
typedef map<ll,ll> m_ll_ll;
typedef map<int,ll> m_i_ll;
typedef map<string,ll> m_s_ll;
typedef map<char,int> m_c_i;
typedef map<char,ll> m_c_ll;
#define rep(i,l,r) for(ll i=l;i<=r;i++)
#define per(i,l,r) for(ll i=r;i>=l;i--)
#define eif else if
#define N 105
#define mm(dp) memset(dp,0,sizeof(dp))
#define mm1(dp) memset(dp,-1,sizeof(dp))
#define mm2(dp) memset(dp,0x3f,sizeof(dp))
#define IT set<int>::iterator
const double e=2.71828182845;
const double pi = acos(-1.0);
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int n=1,m1;
    cin>>m1;
    int a[100005];
    while(1)
    {
        int k1;
        cin>>k1;
        if(k1!=m1)
            a[n]=k1;
        else
            break;
        n++;
    }
    n--;
    cout<<"A is created as:";
    rep(i,1,n)
    {
        cout<<" "<<a[i];
    }
    cout<<'\n';
    int index,num;
    cin>>index>>num;
    per(i,index+1,n+1)
    {
        a[i]=a[i-1];
    }
    a[index]=num;
    cout<<"After inserted A is";
    rep(i,1,n+1)
    {
        cout<<" "<<a[i];
    }
    cout<<'\n';
    int num1;
    cin>>num1;
    int flag=0;
    rep(i,1,n+1)
    {
        if(num1==a[i])
        {
            flag=i;
            break;
        }
    }
    rep(i,flag,n+1)
    {
        a[i]=a[i+1];
    }
    cout<<"After deleted A is";
    rep(i,1,n)
    {
        cout<<" "<<a[i];
    }
    cout<<'\n';
    int num2;
    cin>>num2;
    cout<<num2<<" ";
    flag=0;
    rep(i,1,n)
    {
        if(num2==a[i])
        {
           flag=i;
           break;
        }
    }
    if(flag!=0)
        cout<<"is located at index of "<<flag<<'\n';
    else
        cout<<"is not found"<<'\n';
    int num3;
    cin>>num3;
    flag=0;
    cout<<num3<<" ";
    rep(i,1,n)
    {
        if(num3==a[i])
        {
           flag=i;
           break;
        }
    }
    if(flag!=0)
        cout<<"is located at index of "<<flag<<'\n';
    else
        cout<<"is not found"<<'\n';
    int m=1,n1;
    cin>>n1;
    int b[m+5];
    while(1)
    {
        int k1;
        cin>>k1;
        if(k1!=n1)
            b[m]=k1;
        else
            break;
        m++;
    }
    m--;
    cout<<"B is created as:";
    rep(i,1,m)
    {
        cout<<" "<<b[i];
    }
    cout<<'\n';
    cout<<"A cross B is";
    rep(i,1,n)
    {
        rep(j,1,m)
        {
            if(a[i]==b[j])
            {
                cout<<" "<<a[i];
                break;
            }
        }
    }
    cout<<'\n';
    cout<<"A union B is";
    int c[n+m+5];
    int k=1;
    rep(i,1,n)
    {
        cout<<" "<<a[i];
        c[k]=a[i];
        k++;
    }
    rep(i,1,m)
    {
        int u=0;
        rep(j,1,n)
        {
            if(b[i]==a[j])
            {
                u=1;
                break;
            }
        }
        if(u==0)
        {
            c[k]=b[i];
            k++;
            cout<<" "<<b[i];
        }
    }
    k--;
    cout<<'\n';
    cout<<"A union B in sequence is";
    sort(c+1,c+1+k);
    rep(i,1,k)
    {
        cout<<" "<<c[i];
    }
    cout<<'\n';
    return 0;
}

题目3

实习目的:熟练掌握链表的建立及基本操作
问题描述:
1)实现链表的排序(升序)
2)实现两个有序链表的合并:A=A∪B,要求合并后仍然有序。
提交前请将所有的提示信息去掉,只保留最后的输出结果。例如运行时:从键盘直接输入:
2 1 2
3 1 2 3
输出结果为:
1
2
3
分别表示第一个链表元素个数为2,元素分别为 1,2 ;第二个链表元素个数为3,元素分别为1,2,3。
例如:
输入:
2 2 1
3 1 2 3
输出:
1
2
3
这个题用链表写会非常麻烦,用数组,合并后去重会更简单些。

#pragma GCC optimize(3,"Ofast","inline")
#pragma G++ optimize(3)
#include <bits/stdc++.h>
#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
#include <sstream>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<ll,ll> pll;
typedef pair<int,int> pii;
typedef queue<int> q_i;
typedef queue<string> q_s;
typedef queue<double> q_d;
typedef queue<ll> q_ll;
typedef queue<char> q_c;
typedef priority_queue<int> pq_i;
typedef priority_queue<string> pq_s;
typedef priority_queue<double> pq_d;
typedef priority_queue<ll> pq_ll;
typedef stack<int> s_i;
typedef stack<string> s_s;
typedef stack<double> s_d;
typedef stack<ll> s_ll;
typedef stack<char> s_c;
typedef map<ll,ll> m_ll_ll;
typedef map<int,ll> m_i_ll;
typedef map<string,ll> m_s_ll;
typedef map<char,int> m_c_i;
typedef map<char,ll> m_c_ll;
#define rep(i,l,r) for(ll i=l;i<=r;i++)
#define per(i,l,r) for(ll i=r;i>=l;i--)
#define eif else if
#define N 105
#define mm(dp) memset(dp,0,sizeof(dp))
#define mm1(dp) memset(dp,-1,sizeof(dp))
#define mm2(dp) memset(dp,0x3f,sizeof(dp))
#define IT set<int>::iterator
const double e=2.71828182845;
const double pi = acos(-1.0);
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int n;
    cin>>n;
    int a[n+1];
    rep(i,1,n)
    {
        cin>>a[i];
    }
    int m;
    cin>>m;
    int b[m+1];
    rep(i,1,m)
    {
        cin>>b[i];
    }
    int c[n+m+5],k=1;
    mm(c);
    rep(i,1,n)
    {
        c[k]=a[i];
        //cout<<k<<" "<<c[k]<<'\n';
        k++;
    }
    rep(i,1,m)
    {
        c[k]=b[i];
        //cout<<k<<" "<<c[k]<<'\n';
        k++;
    }
    k--;
    sort(c+1,c+1+k);
    cout<<c[1]<<'\n';
    rep(i,2,k)
    {
        if(c[i]!=c[i-1])
            cout<<c[i]<<'\n';
    }
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据结构与算法实验-实验一:线性表基本操作 的相关文章

随机推荐

  • 不知道为什么的为什么

    我最想的是什么仔细想了想 静悄悄的从这个世界无声无息的消失 不想有任何牵连 任何羁绊
  • 随机生成Long值

    随机生成Long类型的数值 public class RandomLongUtil 随机生成Long值 param bit 位数 return 返回Long值 throws Exception 异常 public static Long r
  • STM32PWM控制智能风扇

    设计思路 这个是一个STM32通过定时器产生PWM波控制小风扇的设计 首先STM32驱动ds18b20温度传感器采集环境温度 然后通过按键设置温度的阈值 不同的温度范围定时器产生的PWM波不同 相应的小风扇的转速也会不一样 温度越高 小风扇
  • Spring属性注入方式

    1 Spring也表示一个开源框架 是为了解决企业程序应用开发的复杂性 框架的主要优势之一就是其分层架构 分层架构允许使用者选择使用哪一个组件 同时为J2EE应用程序开发提供集成的框架 Spring使用基本的bean来完成以前只能由EJB完
  • idea乱码解决方式大汇总

    目录 idea版本 解决方法 一 基本方法 1 File gt Settings gt Editor 2 二 Maven乱码解决方法 三 运行时乱码解决方法 四 因为以前乱设置导致的乱码 idea版本 解决方法 一 基本方法 1 File
  • 华为telnet学习笔记

    华为telnet用户密码aaa模式 配置完接口后 aaa local user admin password cipher cisco 创建用户设置账号密码 local user admin service type telnet 为这个用
  • QLUACM暑假训练5 C题题解

    C题题目大意 给一个n行m列的矩阵 矩阵的每个元素由 或者 填充 如果一行或者一列都由 构成 则删除这一行或者这一列 最后按照相对位置输出剩余的元素 题解 题目思路 1 我们需要找出一行或者一列都由 构成的行和列的位置 也就是我们需要找到没
  • 图像分割套件PaddleSeg全面解析(五)模型与Backbone代码解读

    本章节将介绍PaddleSeg的核心部分 分割模型和主干网络部分 在yaml配置文件中有以下定义 模型信息 model 模型的类型FCN type FCN 使用的主干网络为HRNet backbone type HRNet W18 主干网络
  • 宋浩高等数学笔记(六)定积分的应用

    本章继续更新高数笔记 6 5节的物理题暂不更新 有需求的同学自行看课
  • R语言:创建数据集

    文章目录 1 创建数据集 1 1 数据集的概念 1 2 数据结构 1 2 1 向量 1 2 2 矩阵 1 2 3 数组 1 2 4 数据框 data frame 的切片 attach detach 和with 实例标识符 1 2 5 因子
  • Flutter桌面小工具 -- 灵动岛【Windows+Android版本】

    通过此篇文章 你将了解到 Flutter动画实现灵动岛 Flutter如何开发一个置顶可自由拖拽的小工具 分享一些关于灵动岛的想法 本文为稀土掘金技术社区首发签约文章 14天内禁止转载 14天后未获授权禁止转载 侵权必究 前言 Flutte
  • FormData(file类型文件)

    有的时候我们上传图片时 后台要求是file类型 我们可以借助FormData 以这种方式上传的 后台接收到的 window files self files 0 if window files var form new FormData v
  • [Python从零到壹] 十.网络爬虫之Selenium爬取在线百科知识万字详解(NLP语料构造必备技能)

    欢迎大家来到 Python从零到壹 在这里我将分享约200篇Python系列文章 带大家一起去学习和玩耍 看看Python这个有趣的世界 所有文章都将结合案例 代码和作者的经验讲解 真心想把自己近十年的编程经验分享给大家 希望对您有所帮助
  • sql计算留存率

    SELECT first day sum case when by day 0 then 1 else 0 end day 0 sum case when by day 1 then 1 else 0 end day 1 sum case
  • 解决WebSocketClient.js?5586:16 WebSocket connection to ‘ws://192.168.1.102:8999/ws‘ failed:

    修改vue config js里的devServer配置 添加client 配置 client webSocketURL ws 0 0 0 0 8999 ws module exports 配置跨域请求 devServer 项目运行的端口号
  • frida辅助分析ollvm字符串加密

    frida辅助分析ollvm字符串加密 近期逆向任务繁重且艰巨 因此把工作期间得学习心得做下笔记还是十分得有必要得 防止后期遗忘 个人博客 http www zhuoyue360 com 文章目录 frida辅助分析ollvm字符串加密 一
  • JAVA解析纯真IP地址库

    前几天看了下Ruby的IPParse 觉得很过瘾 上网查了下貌似很多IP数据库都要收费的 就下了个纯真QQIP地址库 发现还可以在线升级的 很适合咱做点小玩意 具体解析的纯真版IP地址库请详见http lumaqq linuxsir org
  • Discuz!开发之主题高亮字段highlight解析

    Discuz 开发之主题高亮字段highlight解析 相关数据表pre forum thread 我们可以看到主题高亮信息存储于字段highlight 且为一个整型数据 那么discuz 如何将这个整型数解析为高亮 包括 字体颜色 背景颜
  • FPGA开发流程概述

    Lesson 3 FPGA开发流程概述 开始学习FPGA 想尽快上手FPGA开发 那么先来了解一下FPGA的开发流程 1 需求分析到模块划分 需求说明文档 器件选择 逻辑资源 功耗 IO数量 封装等等 配置电路考虑 开发工具选择 电路板的可
  • 数据结构与算法实验-实验一:线性表基本操作

    线性表基本操作 文章目录 线性表基本操作 题目1 题目2 题目3 题目1 线性表是最常见和常用的ADT 假设线性表的元素为整数 请基于顺序存储结构实现线性表ADT 基本功能包括 1 建立线性表 输入有两行 第一行是一个整数n 线性表的长度