Kobe___Bryant 2016-05-17 08:44 采纳率: 0%
浏览 1234

很奇怪的数据结构顺序表问题

用c++写了一个顺序表的程序,如下

 #ifndef SEQLIST_H_INCLUDED
#define SEQLIST_H_INCLUDED

using namespace std;

template <class T>
class seqList
{
private:
    T * data;
    int maxSize;
    int last;
public:
    seqList(int sz = 2);
    ~seqList();
    bool Insert(int i, T & x);
    bool Remove(int i, T & x);
    int size() const{ return maxSize; }
    void exchange();
    void input();
};

template <class T>
seqList<T>::seqList(int sz)
{
    maxSize=sz;
    last=sz-1;
    data = new T[maxSize];
}

template <class T>
seqList<T>::~seqList()
{
    delete[] data;
}

template <class T>
bool seqList<T>::Insert(int i, T & x)
{
    if (last == maxSize-1)
        return false;
    if(i<0 || i>last+1)
        return false;
    for(int j=last; j>=i-1; j--)
    {
        data[j+1]=data[j];
    }
    data[i-1]=x;
    last++;
    return true;
}

template <class T>
bool seqList<T>::Remove(int i, T & x)
{
    if(last == -1)
        return false;
    if(i<1 || i>last+1)
        return false;
    x=data[i-1];
    for(int j=i; j<=last; j++)
    {
        data[j-1]=data[j];
    }
    last--;
    return true;
}


template <class T>
void seqList<T>::exchange()
{
    int n = this->size();
    if(n%2 == 0)
    {
       cout<<"位置置换之前的表为:"<<endl;
       for(int j=0; j<n; j++)
       {
           cout<<data[j]<<" ";
       }
       cout<<endl;
       T temp;
       for(int j = 0; j < n/2; j++)
       {
           temp=data[j];
           data[j]=data[n-1-j];
           data[n-1-j]=data[j];
       }
       cout<<"位置置换后的表为:"<<endl;
       for(int j=0; j<n; j++)
       {
           cout<<data[j]<<" ";
       }
    }
    if(n%2 == 1)
    {
       cout<<"位置置换之前的表为:"<<endl;
       for(int j=0; j<n; j++)
       {
           cout<<data[j]<<" ";
       }
       cout<<endl;
       T temp;
       for(int j=0; j<(n-1)/2; j++)
       {
           temp=data[j];
           data[j]=data[n-1-j];
           data[n-1-j]=data[j];
       }
       cout<<"位置置换后的表为:"<<endl;
       for(int j=0; j<n; j++)
       {
           cout<<data[j]<<" ";
       }
    }
}

template <class T>
void seqList<T>::input()
{
    cout<<"开始建立顺序表!"<<endl;
    for (int i=0; i<maxSize; i++)
    {
        cout<<"请输入顺序表的第"<<i+1<<"个值:";
        cin>>data[i];
    }
    cout<<"含有"<<maxSize<<"个值的顺序表建立成功!"<<endl;
}

#endif // SEQLIST_H_INCLUDED


#include <iostream>
#include "seqList.h"

using namespace std;

int main()
{
    int n;
    cout << "请输入表的长度:";
    cin >> n;
    seqList<int> sq(n);
    sq.input();
    sq.exchange();
    return 0;
}

运行结果如下:
图片说明

为什么会出现循环,我觉得代码没问题,也有可能是我真的不懂,还有,我用的是codeblock编辑器,不会调试程序,有大神愿意跟我说下比如这个程序改如何调试吗,谢谢!好人一生平安,授人以鱼不如授人以渔!

  • 写回答

2条回答 默认 最新

  • 小灸舞 2016-05-17 08:58
    关注

    代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
    提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
    单步调试和设断点调试是程序员必须掌握的技能之一。
    具体调试方法:http://blog.chinaunix.net/uid-26254991-id-2898302.html

    评论

报告相同问题?

悬赏问题

  • ¥15 有两个非常“自以为是”烦人的问题急期待大家解决!
  • ¥30 STM32 INMP441无法读取数据
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧,别用大模型回答,大模型的答案没啥用
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error