|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
1.建立一个顺序表,随机产生10个100以内的整数,并按要求完成:
(1)编写显示函数,在屏幕上显示顺序表中的10个整数:
(2)编写查找函数,从键盘输入任一整数在顺序表中查找,若找到,这回该元素在顺序表中的位置,否则提示无此元素;
(3)编写插入函数,从键盘输入待插入元素及插入位置,将完成插入后的顺序表输出;
(4)编写剩除函数,从键盘输入待删除元素位置,将该位置元素删除后的顺序表输出。
为什么用Visual Studio 2019 运行出来有很多bug,该怎么修改?
#include<iostream>
using namespace std;
const int Maxsize = 100;
template <typename int>
class SeqList
{
public:
SeqList();
SeqList(int a[], int n);
~SeqList();
int Length();
int Locate(int x);
void Insert(int i, int x);
int Delete(int i);
void PrintList();
private:
int data[Maxsize];
int length;
};
template<typename int>
SeqList<int>::SeqList(int a[], int n)
{
if (n > Maxsize)throw"参数非法";
for (int i = 0; i < n; i++)
data[i] = a[i];
length = 10;
}
template<typename int>
void SeqList<int>::PrintList();
{
for (int i = 0; i < length; i++)
cout << data[i] << "\t";
cout << endl;
}
template<typename int>
int SeqList<int>::Locate(int x)
{
for (int i = 0; i < length; i++)
if (data[i] == x) return i + 1;
return 0;
}
template<typename int>
void SeqList<int>::Insert(int i, int x)
{
if (length == Maxsize)throw"上溢";
if (i < 1 || i > length + 1)throw"插入位置错误";
for (int j = length; j >= i; j--)
data[j] = data[j - 1];
data[i - 1] = x;
length++;
}
template<typename int>
int SeqList<int>::Delete(int i)
{
int x;
if (length == 0)throw"下溢";
if(i<1 || i>length)throw"删除位置错误";
for (int j = i; j < length; j++)
data[j - 1] = data[j];
length--;
return x;
}
int main()
{
int a[10] = { 5,19,45,47,50,60,65,67,78,80 }, x, i;
int length = 10;
SeqList<int>L{ a,5 };
cout << "显示当前线性表的数据为:";
a.PrintList();
cout << "请输入待查找的元素值:";
cin >> x;
i = a.Locate(int x);
if (0 == i)throw"无此元素";
else cout << "元素" << x << "的位置为:" << i << endl;
try
{
a.Insert(2, 8);
cout << "执行插入操作后数据为:";
a.PrintList();
}
catch (char *str) { cout << str << endl; };
try
{
cout << "请输入要删除第几个元素:";
cin >> i;
x=a.Delete(int 4);
cout << "删除的元素是"<<x<<",删除后数据为:";
a.PrintList();
}
catch (char *str) { cout << str << endl; };
return 0;
本帖最后由 xieglt 于 2020-11-2 19:39 编辑
首先,语法错误比较多。还有一些字符打成了中文全角字符。
模板类的定义为 template <typename T> //这里不是int 而是代称 T ,当然也可以是别的非c++关键字,如果指定类型就没必要用模板类,
class SeqList
{
public:
private:
T data[100] ;
int length;
}
模板类的使用 struct complex
{
double x;
double y;
}
SeqList<int> a; //定义一个int 对象
SeqList<double> b; //定义一个double 对象
SeqList<complex> c; //定义一个complex 对象
。。。
修改代码如下,只修改了语法,没有该代码逻辑。代码逻辑应该也有错误,自己仔细看看吧 #include<iostream>
using namespace std;
const int Maxsize = 100;
template <typename T>
class SeqList
{
public:
SeqList();
SeqList(T a[], int n);
~SeqList(){};
int Length();
int Locate(T x);
void Insert(int i, T x);
int Delete(int i);
void PrintList();
private:
T data[Maxsize];
int length;
};
template<typename T>
SeqList<T>::SeqList<T>(T a[], int n)
{
if (n > Maxsize)throw "参数非法";
for (int i = 0; i < n; i++)
data[i] = a[i];
length = 10;
}
template<typename T>
void SeqList<T>::PrintList()
{
for (int i = 0; i < length; i++)
cout << data[i] << "\t";
cout << endl;
}
template<typename T>
int SeqList<T>::Locate(T x)
{
for (int i = 0; i < length; i++)
if (data[i] == x) return i + 1;
return 0;
}
template<typename T>
void SeqList<T>::Insert(int i, T x)
{
if (length == Maxsize) throw "上溢";
if (i < 1 || i > length + 1) throw "插入位置错误";
for (int j = length; j >= i; j--)
data[j] = data[j - 1];
data[i - 1] = x;
length++;
}
template<typename T>
int SeqList<T>::Delete(int i)
{
T x = 0;
if (length == 0)throw "下溢";
if(i<1 || i>length) throw "删除位置错误";
for (int j = i; j < length; j++)
data[j - 1] = data[j];
length--;
return x;
}
int main()
{
int a[10] = { 5,19,45,47,50,60,65,67,78,80 }, x, i;
int length = 10;
SeqList<int>L(a,5);
cout << "显示当前线性表的数据为:";
L.PrintList();
cout << "请输入待查找的元素值:";
cin >> x;
i = L.Locate(x);
if (0 == i) throw "无此元素" ;
else cout << "元素" << x << "的位置为:" << i << endl;
try
{
L.Insert(2, 8);
cout << "执行插入操作后数据为:";
L.PrintList();
}
catch (char *str) { cout << str << endl; };
try
{
cout << "请输入要删除第几个元素:";
cin >> i;
x=L.Delete(4);
cout << "删除的元素是"<<x<<",删除后数据为:";
L.PrintList();
}
catch (char *str) { cout << str << endl; };
return 0;
}
|
|