数据结构——线性表顺序表示(5)

题目来源于王道2018数据结构考研复习指导线性表的综合练习

编译环境:VS2015

题目:从顺序表中删除其值在给定s与t之间(包含s和t,要求s<t)的所有元素,如果s或t不合理或者顺序表为空,则显示出错信息并退出运行。

注意:这道题目与上一道有所不同。上一道题目所要求的表是有序表,而这道题则没要求,因此要考虑乱序的情况。

思路:举个例子,随意给一个顺序表的元素为{1,5,4,2,3,6},需要删除的数字区间是闭区间[2,5],计数变量j=0,记录在闭区间的数的个数

具体流程:

i=0,  L.data[i]=1,  不属于闭区间[2,5],          L.data[i-j]=L.data[0]=1;i++

i=1,  L.data[i]=5,     属于闭区间[2,5],删除,i++,j=1

i=2,  L.data[i]=4,     属于闭区间[2,5],删除,i++,j=2

i=3,  L.data[i]=2,     属于闭区间[2,5],删除,i++,j=3

i=4,  L.data[i]=6, 不属于闭区间[2,5],           L.data[1]=L.data[i]=6

由此不难得出,当第k个元素不属于闭区间[s,t]时,需要将它保留,它在线性表中的位置取决于它前面的部分含有几个在闭区间的元素,将它在原线性表中下表减去它前面需要被删除的元素的个数,就得到它在新的线性表中的下标。

具体实现:

#include<stdio.h>
#include<stdlib.h>
#define initSize 50

typedef int ElementType;
typedef struct {
    ElementType *data;
    int length;
    int maxSize;
}SeqList;

//初始化线性表
void InitList(SeqList &L) {
    L.data = (ElementType*)malloc(sizeof(ElementType)*initSize);
    L.length = 0;//置为空表
    L.maxSize = initSize;
}

//创建顺序表
void CreateList(SeqList &L, int n) {
    L.length = n;
    for (int i = 0;i < n;i++) {
        scanf_s("%d", &(L.data[i]));
    }
}

bool DeleteST(SeqList &L, int s, int t) {
    int i, j= 0;//j为计数变量,用来记录在区间[s,t]的个数
    if ((s >= t) || (L.length == 0))
        return false;
    for (i = 0;i < L.length;i++) {
        if (L.data[i] >= s && L.data[i] <= t)
            j++;
        else
            L.data[i-j] = L.data[i];
    }
    L.length -= j;
    return true;
}

//显示
void ShowList(SeqList L) {
    for (int i = 0;i < L.length;i++) {
        printf_s("%3d", L.data[i]);
    }
}

int main() {
    SeqList L;
    int length, s, t;
    InitList(L);
    printf_s("输入表的长度:");
    scanf_s("%d", &length);
    printf_s("\n输入初始值:");
    CreateList(L, length);
    printf_s("输入要删除的数字范围区间:");
    scanf_s("%d %d", &s, &t);
    DeleteST(L, s, t);
    printf_s("\n删除后的顺序表的元素如下:");
    ShowList(L);
    printf_s("\n");
    system("pause");
    return 0;
}

测试结果:

  

时间: 2024-11-02 06:22:41

数据结构——线性表顺序表示(5)的相关文章

java实现数据结构-线性表-顺序表,实现插入,查找,删除,合并功能

package 顺序表; import java.util.ArrayList; import java.util.Scanner; public class OrderList { /** * @param args * @author 刘雁冰 * @2015-1-31 21:00 */ /* * (以下所谓"位置"不是从0开始的数组下标表示法,而是从1开始的表示法.) * (如12,13,14,15,16数据中,位置2上的数据即是13) * * 利用JAVA实现数据结构-线性表-顺

数据结构线性表顺序结构的实现

package com.he.list; import java.util.Arrays; import org.w3c.dom.ls.LSException; class ArrayList { private int length;// the list's length private int[] store;// store the data // initialize an empty list public ArrayList initList(String name) { retu

数据结构----线性表顺序和链式结构的使用(c)

PS:在学习数据结构之前,我相信很多博友也都学习过一些语言,比如说java,c语言,c++,web等,我们之前用的一些方法大都是封装好的,就java而言,里面使用了大量的封装好的方法,一些算法也大都写好了,java还有三个特性,封装.继承.多态.当然这里不是讲Java,这里主要是说内部结构,大家都知道数据结构有些东西是分为逻辑结构和物理结构的,物理结构有分为顺序结构和链式结构,有不懂得可以百度百科,这里主要是分享线性表的顺序结构.那么什么是线性表呢,线性表是最基本.最简单.也是最常用的一种数据结

数据结构-线性表-顺序表

总括: 线性表是一种最简单的数据结构,线性表的主要操作特点是可以在任意位置插入和删除一个数据元素. 线性表可以用顺序存储结构和链式存储结构存储,用顺序存储结构实现的线性表称为顺序表,用链式存储结构实现线性表称为链表. 1,线性表概述: 线性表:线性表是一种可以在任意位置进行插入和删除数据元素操作的,有n个(n>=0)个相同类型数据元素a0,a1,. . .an组成的线性结构. 线性表抽象数据类型:抽象数据类型是指一个逻辑概念上的类型和这个类型上的操作集合:因此,线性表的抽象数据类型主要包括两个方

基础数据结构-线性表-顺序表的合并操作

因为最近笔记本B面裂了准备去修,复杂些的会优先加上注释,所以在家先把代码和题目贴上来以后补文字,有疑问可以在下面留言. 顺序表的合并操作 题目描述建立顺序表的类,属性包括:数组.实际长度.最大长度(设定为1000) 已知两个递增序列,把两个序列的数据合并到顺序表中,并使得顺序表的数据递增有序输入第1行先输入n表示有n个数据,接着输入n个数据,表示第1个序列,要求数据递增互不等 第2行先输入m表示有m个数据,接着输入m个数据,表示第2个序列,要求数据递增互不等输出顺序表内容包括顺序表的实际长度和数

数据结构&gt;&gt;线性表【注意】--&gt;链表求A-B(原A与B都递增,求完的A-B不改变A原来的顺序)

/*关于链表的题目 * A.B是两个递增有序的单链表,元素个数分别是m和n,求 * 集合A-B,并将结果保存在A中,且仍然保持递增有序. * converge_ab */ #include <iostream.h> using namespace std; typedef struct lnode{ int data; struct lnode * next; }lnode; int main(){ lnode * create_chain(int num,int interval,int s

数据结构与算法 1 :基本概念,线性表顺序结构,线性表链式结构,单向循环链表

[本文谢绝转载] <大纲> 数据结构: 起源: 基本概念 数据结构指数据对象中数据元素之间的关系  逻辑结构 物理结构 数据的运算 算法概念: 概念 算法和数据结构区别 算法特性 算法效率的度量 大O表示法 时间复杂度案例 空间复杂度 时间换空间案例 1)线性表: 线性表初步认识: 线性表顺序结构案例 线性表顺序结构案例,单文件版 线性表的优缺点 企业级线性表链式存储案例:C语言实现 企业级线性表链式存储案例:C语言实现 单文件版 企业级线性表链式存储案例,我的练习  线性表链式存储优点缺点

C++数据结构与算法_2_线性表 --顺序表的应用示例

h2.western { font-family: "Liberation Sans",sans-serif; font-size: 16pt; }h2.cjk { font-family: "微软雅黑"; font-size: 16pt; }h2.ctl { font-family: "AR PL UMing CN"; font-size: 16pt; }h1 { margin-bottom: 0.21cm; }h1.western { fon

C++数据结构与算法_1_线性表 --顺序表的实现与分析

顺序表的实现与分析 引 --线性表的抽象基类: template <typename T> class LinearList { public: LinearList(); ~LinearList(); virtual int Size() const = 0; //返回线性表所能够存储的最大长度 virtual int Length() const = 0; //当前线性表的长度 virtual int Search(T &x) const = 0; virtual int Loca