建立一个顺序表,查找表中第1个与指定元素相等的元素。若存在,则返回该元素在表中的位置(下标);否则返回-1。
望采纳
#include <iostream>
using namespace std;
const int MAX_SIZE = 100; // 定义顺序表的最大长度
class SeqList {
private:
int data[MAX_SIZE]; // 存储元素的数组
int length; // 当前存储的元素个数
public:
SeqList() { // 构造函数初始化为空表
length = 0;
}
bool insert(int pos, int elem) { // 在pos位置插入元素elem
if (pos < 1 || pos > length + 1 || length == MAX_SIZE) { // 判断是否越界或表满
return false;
}
for (int i = length; i >= pos; i--) { // 将pos及其后面的元素向后移动一位
data[i] = data[i - 1];
}
data[pos - 1] = elem; // 在pos位置插入元素elem
length++; // 表长加1
return true;
}
int search(int elem) { // 查找表中第1个与指定元素相等的元素
for (int i = 0; i < length; i++) { // 从头到尾遍历表中元素
if (data[i] == elem) { // 如果找到了与指定元素相等的元素,返回其下标
return i;
}
}
return -1; // 表示未找到
}
};
int main() {
SeqList list;
int n, elem;
cout << "请输入顺序表长度:";
cin >> n;
cout << "请输入顺序表元素:";
for (int i = 1; i <= n; i++) {
cin >> elem;
list.insert(i, elem);
}
cout << "请输入要查找的元素:";
cin >> elem;
int pos = list.search(elem);
if (pos == -1) {
cout << "未找到该元素。" << endl;
} else {
cout << "该元素在表中的位置是:" << pos + 1 << endl;
}
return 0;
}
该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
下面是一个简单的 C++ 代码示例,用于在顺序表中查找第一个与指定元素相等的元素,并返回该元素在表中的位置(下标),如果不存在,则返回 -1。
#include <iostream>
#include <vector>
using namespace std;
int search(vector<int>& v, int target) {
int n = v.size();
for (int i = 0; i < n; i++) {
if (v[i] == target) {
return i; // 返回元素在表中的位置(下标)
}
}
return -1; // 元素不存在,则返回 -1
}
int main() {
vector<int> v{1, 2, 3, 4, 5}; // 定义一个顺序表
int target = 3; // 指定要查找的元素
int pos = search(v, target); // 在表中查找指定元素
if (pos != -1) {
cout << "元素 " << target << " 在表中的位置是 " << pos << endl;
} else {
cout << "元素 " << target << " 不存在于表中" << endl;
}
return 0;
}
在这个示例中,我们首先定义了一个名为 v
的顺序表,然后指定要查找的元素 target
。我们调用 search
函数来查找该元素,如果该元素存在于顺序表中,则返回该元素在表中的位置(下标),否则返回 -1。
在 search
函数中,我们使用一个循环来遍历顺序表中的每个元素,如果该元素与指定元素相等,则返回该元素在表中的位置(下标),否则继续遍历。如果遍历完整个表仍然没有找到与指定元素相等的元素,则返回 -1。
希望这个示例能够帮助你完成这个任务。
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢
1.先建立一个顺序表L={12,13,21,24,28,30,42,77},然后在第i个位置插入一个数据元素25,并返回是否插入成功标志。如果插入成功,顺序表表长增加1
2.实验要点及说明
注意如何取到第i个元素的地址q,以及如何将原第i至第n个元素(这其中一共有n-i+1个元素)依次后移。顺序表插入前、后的状态图如图所示。
3.参考代码
#include "SeqList.h" //源代码请看实验1.1顺序表的建立
int ListInsert_Seq(SeqList *L,int i,int e) ////在第 i 个元素之前插入元素至顺序表
{
int *p,*q,*newbase;
if((i<1)||(i>L->length+1))
return ERROR;
if(L->length>=L->listsize) // 当前空间已满,增加分配
{
newbase = (int *)realloc(L->elem,(L->length+LISTINCREMENT)*sizeof(int));
if(!newbase)
exit(OVERFLOW);
L->elem = newbase;
L->listsize += LISTINCREMENT;
}
q = &L->elem[i-1]; // q 指向插入位置
for(p=&L->elem[L->length-1];p>=q;--p) // 第 n 至第 i 个元素依次后移一个位置
*(p+1) = *p;
*q = e; // 插入新元素 e
L->length++; /////// 注意!要传值回去,形参L 必须用指针变量
return OK;
}
int main()
{
SeqList L;
initList_Seq(&L);
int i,n,e;
printf("\nInput the length of the list L: ");
scanf("%d",&n);
L.length = n;
printf("L.length = %d,n=%d\n",L.length,n);
CreateList_Seq(L);
printf("Input the insert location: ");
scanf("%d",&i);
printf("input 要插入 e 的值:");
scanf("%d",&e);
if(ListInert_Seq(&L,i,e))
{
printf("Output the datas: ");
Output_SeqList(L);
}else
printf("Can't insert the data!\n");
}