栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【数据结构】【线性表】王道课后习题【06.删除有序顺序表重复的元素】(可直接运行)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【数据结构】【线性表】王道课后习题【06.删除有序顺序表重复的元素】(可直接运行)

文章目录
  • 1.题目描述
  • 2.算法实现
  • 3.完整代码
  • 4.运行结果

1.题目描述

从有序顺序表中删除所有其值重复的元素,使表中所有元素的值均不同。

2.算法实现

由于是有序表,那么可以知道如果值重复,那么一定是在一起的。可以定义两个变量i,j。i用于记录最后一个不重复的元素的下标,j用于遍历寻找不重复元素,,相同则j继续自增,直至找到下一个不重复,再进行上一步操作可以通过遍历,如果data[i]与data[j]不相同,则用下标为j的元素覆盖下标为i+1的元素,同时++i,最后修改length,算法完成。

// 算法实现
// 由于是有序表,那么可以知道如果值重复,那么一定是在一起的
// 可以定义两个变量i,j
// i用于记录最后一个不重复的元素的下标
// j用于遍历寻找不重复元素
// 即可以通过遍历,如果data[i]与data[j]不相同,则用下标为j的元素覆盖下标为i+1的元素,同时++i
// 相同则j继续自增,直至找到下一个不重复,再进行上一步操作
// 最后修改length,算法完成
bool delTheSameElement(SeqList &L) {
    // 判空
    if(Empty(L)) {
        printf("the list is empty");
        return false;
    }
    // i用于记录最后一个不重复的元素的下标
    // j用于遍历寻找不重复元素
    int i, j;
    for(i = 0, j = 1;j < L.length;j++) {
        // 若是不重复,则用下标为j的元素覆盖下标为i+1的元素,同时++i
        if(L.data[i] != L.data[j]) {
            // ++i表示先加1再起下标作用
            L.data[++i] = L.data[j];
        }
    }
    // i即为最后一个不重复的元素的下标,故将length修改为i+1
    L.length = i + 1;
    return true;
}
3.完整代码
#include
#include

#define InitSize 10

typedef struct {
    int *data;  // 数据
    int MaxSize;    // 最大容量
    int length; // 目前长度
} SeqList;

// 初始化
void InitList(SeqList &L) {
    // 为了方便,这里选择初始化时填入1-10
    // 申请10个整型的空间
    L.data = (int *)malloc(InitSize * sizeof(int));
    // 数据填入
    for(int i = 0;i < InitSize;i+=2) {
        L.data[i] = i + 1;
        L.data[i + 1] = i + 1;
    }
    L.length = 10;
    L.MaxSize = InitSize;
}

// 判空操作
bool Empty(SeqList L) {
    // 直接根据长度判断即可
    if(L.length == 0) {
        return true;
    }
    return false;
}

// 顺序表的输出操作
bool PrintList(SeqList L) {
    // 若表为空,则不能输出
    if(Empty(L)) {
        return false;
    }
    // 循环遍历输出
    for(int i = 0;i < L.length;i++) {
        printf("data[%d]=%dn", i, L.data[i]);
    }
    return true;
}

// 算法实现
// 由于是有序表,那么可以知道如果值重复,那么一定是在一起的
// 可以定义两个变量i,j
// i用于记录最后一个不重复的元素的下标
// j用于遍历寻找不重复元素
// 即可以通过遍历,如果data[i]与data[j]不相同,则用下标为j的元素覆盖下标为i+1的元素,同时++i
// 相同则j继续自增,直至找到下一个不重复,再进行上一步操作
// 最后修改length,算法完成
bool delTheSameElement(SeqList &L) {
    // 判空
    if(Empty(L)) {
        printf("the list is empty");
        return false;
    }
    // i用于记录最后一个不重复的元素的下标
    // j用于遍历寻找不重复元素
    int i, j;
    for(i = 0, j = 1;j < L.length;j++) {
        // 若是不重复,则用下标为j的元素覆盖下标为i+1的元素,同时++i
        if(L.data[i] != L.data[j]) {
            // ++i表示先加1再起下标作用
            L.data[++i] = L.data[j];
        }
    }
    // i即为最后一个不重复的元素的下标,故将length修改为i+1
    L.length = i + 1;
    return true;
}

int main() {
    SeqList L;
    InitList(L);
    PrintList(L);
    printf("------------------------n");
    delTheSameElement(L);
    PrintList(L);
    return 0;
}
4.运行结果

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1008298.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号