鱼C论坛

 找回密码
 立即注册
查看: 2481|回复: 10

[已解决]数据结构线性表的问题

[复制链接]
回帖奖励 2 鱼币 回复本帖可获得 1 鱼币奖励! 每人限 1 次
发表于 2020-11-1 22:00:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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;

最佳答案
2020-11-2 19:37:20
本帖最后由 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-1 23:47:26 | 显示全部楼层

回帖奖励 +1 鱼币

要个币币
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-2 08:02:41 | 显示全部楼层

回帖奖励 +1 鱼币

百度一下吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-2 12:25:29 | 显示全部楼层

回帖奖励 +1 鱼币

币币
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-2 17:07:11 | 显示全部楼层

回帖奖励 +1 鱼币

这是C吧,我不会,帮你顶一顶,等大佬过来。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-2 17:42:02 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-2 19:37:20 | 显示全部楼层    本楼为最佳答案   

回帖奖励 +1 鱼币

本帖最后由 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-2 22:20:26 | 显示全部楼层
谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-3 19:56:29 | 显示全部楼层

回帖奖励 +1 鱼币

领鱼币
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-4 10:25:33 | 显示全部楼层

回帖奖励 +1 鱼币

原来如此
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-5 21:11:56 | 显示全部楼层

回帖奖励 +1 鱼币

还能那币吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-11 00:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表