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 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题