以下代码为使用C++完成顺序表的静态实现
- 后面会尝试顺序表的动态实现
- 顺序表的销毁还不会实现,待后面的深入学习再来补充
#include1,目前发现了以下两个问题 待解决using namespace std; #define maxSize 10 struct sqlList { int data[maxSize]; //静态的“数组”存放数据 int length; //顺序表的当前长度 }; //打印顺序表 void printSqlList(sqlList& L) { cout << "当前顺序表顺序为:"; for (int i = 0; i < L.length; i++) { cout << L.data[i] << " "; } cout << endl; } //打印顺序表长度 void printlength(sqlList& L) { cout << "顺序表当前长度为:" << L.length << endl; } //自定义顺序表 void setSqlList(sqlList &L,int n) //n为用户自定义顺序表长度 { cout << "请输入数值" << endl; for (int i = 0; i < n; i++) { cin >> L.data[i]; L.length++; } printSqlList(L); } //基本操作 初始化顺序表 void initList(sqlList &L) { for (int i = 0; i < maxSize; i++) { L.data[i] = 0; L.length = 0; } cout << "顺序表初始化完成!(全部置0)" << endl; } //基本操作 增加某数据(**此处后面为解决问题有修改**) void increaseSqlList(sqlList &L,int a,int b) //在第a处插入b; { if (a > L.length) { cout << "增加数据操作有误" << endl; } else { for (int i = L.length; i >= a; i--) { L.data[i] = L.data[i - 1]; } L.data[a - 1] = b; L.length++; printSqlList(L); printlength(L); } cout << endl; } //基本操作 删除某数据 void deletSqlList(sqlList& L,int a) { if (a > L.length) { cout << "输入有误 查找不到要删除的数据" << endl; } else { for (int i = a-1; i < L.length; i++) { L.data[i] = L.data[i + 1]; } L.length--; printSqlList(L); printlength(L); } } //基本操作 修改某数据 void modification(sqlList &L,int a,int b) //a为要修改的位置,b为要修改成的内容 { if (a > L.length) { cout << "修改数据失败!" << endl; } else { L.data[a-1] = b; cout << "修改数据成功!" << endl; } printSqlList(L); printlength(L); } //基本操作 查找某数据 void findBySta(sqlList& L, int a) //按位置查找 { if (a > L.length) { cout << "查找失败,该位置暂无数据!" << endl; } else { cout << a << " 位置的数据为:" << L.data[a - 1]; } } void findByNum(sqlList& L, int a) //按数字查找 { int num=0; for (int i = 0; i < L.length; i++) { if(L.data[i]==a) { num = 1; cout << "查找的数字" << a << "位于顺序表第" << i + 1 << endl; } } if (num == 0) { cout << "在顺序表中查找不到数字" << a; } } int main() { int nlength; //自定义数组长度 cout << "请定义顺序表长度:" ; cin >> nlength; sqlList L; //定义一个顺序表L if (nlength > maxSize) { cout << "顺序表初始化出错!" << endl; } else { //添加 初始化 顺序表 initList(L); //初始化顺序表(全部置0 避免脏数据) setSqlList(L, nlength); //顺序表传值 cout << endl; //增操作 int station1, num1; cout << "请输入想要插入的位置:" ; cin >> station1; cout << "请输入想要插入的数字:" ; cin >> num1; increaseSqlList(L, station1, num1); cout << endl; //删操作 int station2; cout << "请输入想要删除的位置:" ; cin >> station2; deletSqlList(L, station2); cout << endl; //改操作 int station3, num3; cout << "输入想要修改的位置:"; cin >> station3; cout << "请输入修改后的数字:"; cin >> num3; modification(L, station3, num3); cout< > way; if (way == 1) { cout << "请输入想要查找的位置:"; cin >> a; findBySta(L, a); } else if (way == 2) { cout << "请输入想要查找的数字:"; cin >> b; findByNum(L, b); } else { cout << "输入的数字有误!" << endl; } } return 0; }
- 待解决
解决办法如下:
//基本操作 增加某数据
void increaseSqlList(sqlList &L,int a,int b) //在第a处插入b;
{
if (a > L.length || a==maxSize) //此处有修改
{
cout << "增加数据操作有误" << endl;
}
else
{
for (int i = L.length; i >= a; i--)
{
L.data[i] = L.data[i - 1];
}
L.data[a - 1] = b;
L.length++;
printSqlList(L);
printlength(L);
}
cout << endl;
}
- 待解决
在按照数字进行查找操作的时候 for循环来进行数组的遍历,输出结果的时候 想要的操作:完成遍历寻找不到数字打印“找不到结果”的时候,发现循环一次就要打印一次
因此想到了在for循环外构建一个int数,通过int数最后实现单独打印“找不到结果”。不知道是否有更好的办法?



