王道数据结构代码题第二章第六题

该代码实现了一个函数`delrepeat`,用于删除有序顺序表中的重复元素。它遍历表,比较相邻元素,若相等则计数并删除,最后更新表的长度。

王道数据结构代码题第二章第六题

问题描述

删除有序顺序表表中值重复的元素,即重复元素只保留一个

代码

bool delrepeat(SqList &L){
    ElemType a;
    int count=0;//记录和某值重复的元素有几个
    int minus=0;//记录一共删除几个元素
    if(L.length==0){
        return false;
    }
    for(int i=1;i<L.length;i++){
        if(L.data[i]==L.data[i-1]){
            count++;
            minus++;
        }
        else{
            L.data[i-count+1]=L.data[i];
            count=0;
        }
    }
    L.length-=minus;
    return true;
}
### 数据结构王道教材课后习及答案 #### 顺序表删除最小值 对于顺序表操作中的删除最小值问,在《2024王道数据结构》教材P18-P19的第2.2.1提供了详细的解答方法[^1]。该目要求实现一个函数来移除顺序表中的最小元素并返回新的顺序表。 以下是Python代码示例: ```python def delete_min(lst): if not lst: return [] min_val = min(lst) new_lst = [val for val in lst if val != min_val] return new_lst ``` 此代码通过遍历列表找到最小值,并创建一个新的不包含这个最小值的新列表作为结果返回。 #### 图的应用——拓扑排序序列 关于图的应用,《25版王道数据结构第六章讨论了多个应用场景,其中包括如何求解给定有向无环图(DAG)的所有可能的拓扑排序序列[^2]。书中提到的例子展示了几个不同的有效排列方式,如`ABCFDEG`, `ABCDFEG`, `ABCDEFG`, `ABDCFEG` 和 `ABDCEFG`都是合法的结果之一。 #### 二叉树概念理解 在第五章中探讨了有关二叉树的基础理论[^3]。“二叉树为空”的定义是指这棵树没有任何节点存在;然而值得注意的是,“空”并不代表对象本身不存在—它只是表示当前状态下没有实际的数据存储于其中而已。另外还强调了一个重要区别:虽然线性表和树允许其内部不含任何项(即它们能够处于“空状态”),但是按照某些形式化描述下的图形结构则不允许完全没有顶点的情况发生。 #### 查找出现次数超过一半的数 最后,在处理数组方面的一个经典问是找出那个出现了多于总数半数以上的特定数值。这个问可以在《王道22数据结构第二章找到相应的练习[^4]。下面给出了一种解决方案思路: ```cpp #include <iostream> using namespace std; // 假设输入已经按升序排列好的整型数组A[]以及长度n int findMajorityElement(int A[], int n){ int count = 1; int candidate = A[0]; // Boyer-Moore 投票算法 for (int i = 1; i < n; ++i) { if (count == 0) { candidate = A[i]; count++; } else if (candidate == A[i]) { count++; } else { count--; } } // 验证候选者确实是多数元素 count = 0; for (int i = 0; i < n; ++i) { if (A[i] == candidate) { count++; } } if (count > n / 2) { return candidate; } else { cout << "No majority element found." << endl; return -1; } } ``` 这段C++程序实现了Boyer-Moore投票算法用于高效查找满足条件的那个唯一数字。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值