删除一个顺序表里的某个数据 一样的只留下一个 C++
时间: 2024-03-07 19:47:00 浏览: 55
可以用双指针法来实现。首先将顺序表按照从小到大的顺序排序,然后用两个指针`i`和`j`从第二个数据开始依次往后扫描,若`a[i]`和`a[j]`相等,则将`j`指向下一个数据,直到`a[i]`和`a[j]`不相等,此时将`a[j]`赋值给`a[i+1]`,最后修改顺序表的长度即可。
以下是 C++ 代码实现:
```c++
void removeDuplicate(int* a, int& n) {
sort(a, a + n); // 排序
int i = 0, j = 1;
while (j < n) {
if (a[i] == a[j]) {
j++;
} else {
a[++i] = a[j++];
}
}
n = i + 1; // 修改长度
}
```
其中,`a`为存储数据的数组,`n`为顺序表的长度。
相关问题
数据结构中 c++写出代码顺序表里如何找到第i个元素
在C++中,如果你使用顺序表(也叫线性表或数组),要查找第i个元素,你可以直接通过索引来访问。假设你有一个动态大小的`std::vector`作为顺序表的例子:
```cpp
#include <iostream>
#include <vector>
// 顺序表(这里使用了std::vector)
class SequentialList {
private:
std::vector<int> elements;
public:
// 添加元素
void addElement(int value) {
elements.push_back(value);
}
// 查找第i个元素
int getNthElement(int i) {
if (i >= 0 && i < elements.size()) { // 确保索引有效
return elements[i];
} else {
throw std::out_of_range("Invalid index"); // 如果索引越界,抛出异常
}
}
};
int main() {
SequentialList list;
list.addElement(1);
list.addElement(2);
list.addElement(3);
try {
int element = list.getNthElement(1); // 找到第二个元素
std::cout << "The second element is: " << element << std::endl;
} catch (const std::out_of_range& e) {
std::cerr << e.what() << std::endl;
}
return 0;
}
```
在这个例子中,`getNthElement`函数接受一个整数索引`i`,如果它在范围之内,就返回对应的值;否则,会抛出一个`std::out_of_range`异常。
写一个数据结构线性表程序,要求1. 创建空顺序表; 2. 在顺序表上通过插入1~9建立非空顺序表并输出; 3. 取第6个数并输出; 4. 在已有顺序表里查找5,并输出查找结果; 5. 删除顺序表里的第4个数并输出删除后的顺序表。
首先,让我们编写一个简单的数据结构`SequentialList`来代表顺序表,它包含一个数组来存储元素,以及一些基本的操作方法。
```python
class SequentialList:
def __init__(self):
self.data = []
# 创建空顺序表
def create_empty(self):
print("创建空顺序表:")
self.data = []
# 插入元素
def insert(self, index, value):
if index < len(self.data) + 1:
self.data.insert(index, value)
print(f"插入{value}到位置{index}, 序列变为:", self.data)
else:
print("插入位置超出范围!")
# 输出第n个数
def get_element(self, n):
if 0 <= n < len(self.data):
print(f"第{n+1}个数是 {self.data[n]}")
else:
print("索引超出范围!")
# 查找元素
def find(self, value):
for i, num in enumerate(self.data):
if num == value:
print(f"{value}在序列中的位置是 {i}")
return True
print(f"{value}不在序列中.")
return False
# 删除元素
def delete(self, index):
if index < len(self.data):
del self.data[index]
print(f"删除第{index+1}个数后, 序列变为:", self.data)
else:
print("删除位置超出范围!")
# 实例化并操作顺序表
seq_list = SequentialList()
seq_list.create_empty()
# 插入1-9
for i in range(1, 10):
seq_list.insert(i, i)
# 获取第6个数
seq_list.get_element(5)
# 查找数字5
seq_list.find(5)
# 删除第4个数
seq_list.delete(3)
# 显示删除后的顺序表
print("\n删除操作后完整的顺序表:", seq_list.data)
```
阅读全文