| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 415 人关注过本帖
标题:顺序表程序有问题
只看楼主 加入收藏
kk771672602
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2015-10-20
收藏
 问题点数:0 回复次数:1 
顺序表程序有问题
如题:顺序表的类实现,插入操作看似没有问题,删除有问题,最后的查找程序直接崩掉了,自己也不是很清楚其中的缘故,求大神讲解,不胜感激!!!
程序代码:
#include<iostream>
using namespace std;

#define ok 0
#define error -1

class SeqList
{
private:
    int *list;
    int Maxsize;
    int last;
public:
    SeqList();
    ~SeqList()
    {
    delete []list;
    }
    void initinal(int *mylist,int n);
    int list_insert(int i,int item);
    int list_del(int i);
    int list_find(int value);
    int list_get(int i);
    void list_display();
};

SeqList::SeqList()
{
    Maxsize = 1000;
    list = new int[Maxsize];
    last = -1;
};
void SeqList::initinal(int *mylist,int n)
{
    Maxsize = n;
    list = new int[Maxsize];
    for(int i =  0; i < n;i++)
        list[i] = mylist[i];
    last = Maxsize - 1;
};


int SeqList::list_insert(int i,int item)
{
    if(i < 0||i > last+1)//||last ==Maxsize-1)
    {
        return error;
    }
    else
    {
        last++;
        for(int j = last;j > i;j--)
            list[j] = list[j-1];
        list[i] = item;
        return ok;
    }
};

int SeqList::list_del(int i)
{
    if(i >= 0)
    {
        last--;
        for(int j = i;j <= last;j++)
            list[j] = list[j+1];
        return ok;
    }
    else 
        return error;
};

int SeqList::list_get(int i)
{
    if(i < 0||i >last)
        return error;
    else
    return list[i];
}

void SeqList::list_display()
{
    for(int i = 0;i < last+1;i++)
        cout<<list[i]<<" ";
    cout<<endl;
};


int main()
{
    int n;
    int mylist[1000];
    cin>>n;
    for(int i= 0;i < n;i++)
    {
        cin>>mylist[i];
    }
    SeqList myseq;
    myseq.initinal(mylist,n);
    myseq.list_display();

    int j;
    for(j = 0;j < 2;j++)//在k位置插入item
    {
    int k,item;
    cin>>k>>item;
    myseq.list_insert(k,item);
    myseq.list_display();
    }

    for(j = 0;j < 2;j++)//删除位置为k的元素
    {
    int k;
    cin>>k;
    myseq.list_del(k);
    myseq.list_display();
    }

    for(j = 0;j < 2;j++)//查找位置为k的元素
    {
    int k;
    cin>>k;
    cout<<myseq.list_get(k)<<endl;
    }
    return (0);
}
搜索更多相关主题的帖子: 不胜感激 
2015-10-20 17:45
kk771672602
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2015-10-20
收藏
得分:0 
两年了,没人,自己来“挖坟”吧。上面的代码主要问题出在“下标”上。比如删除int SeqList::list_del(int i)中,将后面的元素前移规范写法应该是“list[j-1] = list[j];”,插入操作的“i < 0”限制不对,正常输入序号为1 2 3 ...而不是0 1 2 3...再比如插入时的循环终止条件,查找时的下标等等都是有问题,所以才会导致最后崩溃。线性表是数据结构中十分重要的基础,用顺序表来实现的话,比较简单,但要特别注意下标和元素移动的问题等;使用链表实现的话,稍微比顺序表麻烦,但更加灵活。
2017-08-12 16:16
快速回复:顺序表程序有问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.011811 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved