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

问题描述

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

用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编辑器,不会调试程序,有大神愿意跟我说下比如这个程序改如何调试吗,谢谢!好人一生平安,授人以鱼不如授人以渔!

解决方案

数据结构--顺序表
数据结构顺序表
数据结构顺序表

解决方案二:

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

解决方案三:

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

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

 请输入表的长度:
 开始建立顺序表!
 请输入顺序表的第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;
时间: 2024-08-04 05:05:34

很奇怪的数据结构顺序表问题的相关文章

顺序存储线性表-数据结构顺序表的操作(c++)

问题描述 数据结构顺序表的操作(c++) 求解答谢谢 解决方案 贴出代码而不是截图.发了帖子你难道自己不看下.这么小的字根本看不清. 解决方案二: 什么是线性表?定义:由n(n>=0)个数据类型相同的数据元素组成的有限序列.特点是:在数据元素的非空有限集合中,除第一个元素无直接前驱,最后一个元素无直接后继外,集合中其余每个元素均有唯一的直接前驱和直接后继.什么是顺序表,在这里回答一下.顺序表就是线性表的顺序存储,其特点是:物理顺序与逻辑顺序是相同的,关系线性化,结点顺序存.线性表顺序存储的表示?

线性表-数据结构顺序表合并中指针怎么用才能运行?

问题描述 数据结构顺序表合并中指针怎么用才能运行? 已知线性表LA和LB中的数据元素按值非递减有序,现要求将LA和LB归并为一个新的线性表LC,且LC中的数据元素仍按值非递减有序排列. 怎么改呢? 初学,数据结构小白 额..,用的顺序表 解决方案 http://blog.sina.com.cn/s/blog_9671d51801019cpj.html 解决方案二: 数据结构笔记--顺序表数据结构 顺序表及合并数据结构之顺序表

调试-数据结构顺序表debug assertion failed

问题描述 数据结构顺序表debug assertion failed //文件linearlist.h #include template class LinearList { public: virtual bool Isempty()const=0; virtual int Length()const=0; virtual bool Find(int i,T &x)const=0; virtual int Search(T x)const=0; virtual bool Insert(int

新手求教-C数据结构顺序表操作问题

问题描述 C数据结构顺序表操作问题 两种操作方式一.利用点运算符访问 #include <stdio.h> #include <stdlib.h> #define MAXSIZE 100 typedef struct { int data[MAXSIZE]; //存放数组元素 int last; //数组的最后一个元素的下标 }squeuelist; squeuelist l={0};int main(void) { int choice=0 mount=0 i=0 dat=0 p

顺序存储线性表-关于数据结构顺序表的应用

问题描述 关于数据结构顺序表的应用 设计一个通讯录,用顺序存储结构进行存储,设计出生成线性表,在第I个结点位置插入结点,删除第I个结点,打印表中结点的算法

数据结构顺序表(栈的操作问题)

问题描述 数据结构顺序表(栈的操作问题) 数据结构顺序表(栈的操作问题) x='@'; 在数据结构中有什么意义? 解决方案 数据结构中最简单的就是线性结构,而栈(stack)则是最典型的线性结构之一.http://blog.csdn.net/hopeyouknow/article/details/6725049 解决方案二: 一般这用来作为终止符号. 解决方案三: 没什么意义,只要符合栈的特点,怎么控制都行,这只是一种控制的方式

数据结构-顺序表的插入输出不了?不明白。初学者,望各位赐教。

问题描述 顺序表的插入输出不了?不明白.初学者,望各位赐教. #include using namespace std; #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 #define OVERFLOW -1 typedef struct { int *elem; int length; int listsize; }SqList; int InitList_Sp(SqList &l) { l.elem=new int[100]; if(!

归并排序-数据结构C语言顺序表的排序和删除问题

问题描述 数据结构C语言顺序表的排序和删除问题 顺序表定义的长度为10000,此时程序可以正常运行:把顺序表长度改成500000,程序出错,不能运行.求问大神是哪里出了错误,还是要提高存储上限?如何改正?#include #include #include typedef int ElemType; #define MAX 10000 typedef struct{ ElemType *elem; int length; }SqList; void InitList(SqList &L){ L.

c++-请问谁有数据结构(C++)顺序表的源代码

问题描述 请问谁有数据结构(C++)顺序表的源代码 输入几个数,然后实现由小到大的排列,之后再第一个数和第二个数之间插入一个数 解决方案 http://blog.csdn.net/ristal/article/details/5915097 解决方案二: 数据结构电话号码本源代码(顺序表)数据结构 顺序表的操作(源代码)数据结构之顺序表