用c++设计删除顺序表中所有(m,n)的值)
时间: 2023-04-09 14:02:30 浏览: 56
可以使用双指针法,一个指针指向当前位置,另一个指针指向下一个位置,如果当前位置的值为(m,n),则将第二个指针向后移动,直到找到一个不为(m,n)的值,然后将第一个指针指向的位置赋值为第二个指针指向的位置,同时将第二个指针向后移动。重复这个过程直到遍历完整个顺序表。代码实现如下:
void deleteMN(int* list, int len, int m, int n) {
int i = 0, j = 0;
while (j < len) {
if (list[j] == m && list[j+1] == n) {
j += 2;
} else {
list[i++] = list[j++];
}
}
}
相关问题
使用C++顺序表解决约瑟夫环问题
约瑟夫环问题是一个经典的问题,可以使用顺序表来解决。
具体思路是:将约瑟夫环中的人员编号依次存入顺序表中,然后按照约瑟夫环的规则,依次删除表中的元素,直到表中只剩下一个元素为止。
以下是使用 C 语言实现约瑟夫环问题的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MaxSize 100
typedef struct {
int data[MaxSize];
int length;
} SeqList;
void InitList(SeqList *list) {
list->length = 0;
}
void InsertList(SeqList *list, int num) {
if (list->length >= MaxSize) {
printf("List is full.\n");
exit(1);
}
list->data[list->length++] = num;
}
void Josephus(SeqList *list, int k, int m) {
int i, j;
for (i = k; list->length > 1; i = (i + m - 1) % list->length) {
printf("Delete: %d\n", list->data[i]);
for (j = i; j < list->length - 1; j++) {
list->data[j] = list->data[j + 1];
}
list->length--;
}
printf("The last one is: %d\n", list->data[0]);
}
int main() {
SeqList list;
InitList(&list);
int i;
for (i = 1; i <= 10; i++) {
InsertList(&list, i);
}
Josephus(&list, 0, 3);
return 0;
}
```
在该代码中,我们首先定义了一个顺序表结构体,包含一个长度为 MaxSize 的数组和当前表的长度。然后我们定义了三个函数:InitList 用于初始化表,InsertList 用于在表中插入元素,Josephus 用于解决约瑟夫环问题。
在 Josephus 函数中,我们使用了一个循环,每次循环中,我们按照约瑟夫环的规则计算出下一个要删除的元素的下标 i,然后将该元素从表中删除。最后循环结束时,表中只剩下一个元素,即为约瑟夫环的最后一个人。
在 main 函数中,我们首先初始化了一个长度为 10 的顺序表,并且依次插入了数字 1 到 10。然后我们调用 Josephus 函数,传入参数 k = 0 和 m = 3,即从第 0 个人开始,每次删除第三个人。最后程序输出最后一个人的编号,即为解决约瑟夫环问题的答案。
从顺序表中删除自第i个元素开始的k个元素,写出具体算法代码
可以用以下代码实现从顺序表中删除自第i个元素开始的k个元素:
```C++
void deleteKElements(int arr[], int n, int i, int k) {
if (i >= n) // i越界
return;
int j = i + k - 1;
if (j >= n) // j越界
j = n - 1;
for (int m = j + 1; m < n; m++)
arr[m - k] = arr[m];
n -= (j - i + 1);
}
```
其中,arr为待删除元素所在的顺序表,n为该顺序表中的元素个数,i为从哪个元素开始删除,k为要删除的元素个数。
如果 i >= n,即待删除的元素开始位置已经超过了该顺序表目前元素的个数,直接返回即可。如果 j >= n,即待删除的元素超过了该顺序表的最大下标值,将 j 修改为该顺序表的最大下标值,并把多余的元素从 i+k 位置开始向前移动 k 个位置。
最后用 n 减去被删除的元素个数即可得到删除之后顺序表中的元素个数。
相关推荐
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)