Kobe___Bryant 2016-05-17 00: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 00:58
    关注

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

    评论
  • 「已注销」 2016-05-17 07:00
    关注

    调试的方法楼上已经说了,至于代码本身,

    你的这段代码的确好诡异,按说你执行后前三句输出应该是:

     请输入表的长度:
     开始建立顺序表!
     请输入顺序表的第1个值:
    

    你贴的图和代码不符,中间少了一句话,清空项目重新build一下试试吧,你也可以在input()的第一句打个断点跟进去看看。。

    另外,目测你的代码exchange()跑出来的结果不会是正确的

     temp=data[j];
     data[j]=data[n-1-j];
     data[n-1-j]=data[j];
    

    这么做不能交换 data[n-1-j] 和 data[j] 吧,一般都会写成

     temp=data[j];
     data[j]=data[n-1-j];
     data[n-1-j]=temp;
    
    评论
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部