C++ 数据结构 顺序表调用问题【菜鸟级】

头文件seqlist.h:#ifndefSEQLIST_H#defineSEQLIST_H#include<iostream>#include<stdlib.h>usin... 头文件seqlist.h:
#ifndef SEQLIST_H
#define SEQLIST_H
#include <iostream>
#include <stdlib.h>
using namespace std;
typedef int datatype;
const int maxlen=100;
class seqlist{
private:
datatype data[maxlen];
int len;
public:
seqlist(void);
int input(int len);
~seqlist(void);
int length(void) const;
datatype get(int i) const;
int locate(datatype & item) const;
int insert(const datatype & item,int i);
int change(int x,int y);
datatype Delete(int i);
int empty(void)const;
void clear(void);
void print(int);
};
#endif
int x=0,a=0,b=0;
int len=0;
seqlist::seqlist(void):len(0){}
seqlist::~seqlist(void){}
int seqlist::input(int len){
for(int i=1;i<=len;i++){
cout<<"请输入第"<<i<<"个元素:";
cin>>x;
data[i-1]=x;}
cout<<endl;
return 0;
}
int seqlist::length(void)const{return len;}

//==========以下几段都有问题==========//
int seqlist::insert(const datatype & item,int i)
{
if(len==maxlen) return 0;
if(i<1||i>len+1) return 0;
for(int j=len;j>=i;j--) data[j]=data[j-1];
data[i-1]=item;
len++;
return 1;
}

datatype seqlist::Delete(int i)
{
int j;
if ((i<1)||(i>len)){cout<<"位置超界!"<<endl;}
else if(len==0){cout<<"空表不能删除"<<endl;}
datatype t=data[i-1];
for (j=i;j<len;j++)
data[j-1]=data[j];
len--;
return t;
}

int seqlist::locate(datatype&item)const{
int i=1;
for(i=1;i<=len;i++){
if (data[i-1]==item) {
cout<<"此元素在第"<<i<<"个位置上"<<endl;}
}
if(i>len){cout<<"抱歉,您所查找的值并不存在"<<endl<<endl;}

return i;
}

int seqlist::empty(void)const{if(len==0){cout<<"此表为空表"<<endl;} return 1;}
void seqlist::clear(void){len=0;}

datatype seqlist::get(int i)const{
if(i>=1&&i<=len) return data[i-1];
return NULL;
}

int seqlist::change(int x,int y){
for(int j=1;j<=len;j++){
if (data[j]==a) {data[j]=b;}
}
return 0;
}
//==========//

void seqlist::print(int size) {
cout<<"顺序表:"<<endl;
for (int i=1;i<=size;i++){
{cout<<data[i-1]<<" ";}
}
cout<<endl<<endl;
}

源文件:
#include<iostream>
#include"seqlist.h"
using namespace std;
void main()
{
int n=0,i=0,j=0,c=0;
seqlist s;
do{
cout<<"1、新建顺序表"<<endl;
cout<<"2、插入元素"<<endl;
cout<<"3、删除元素"<<endl;
cout<<"4、查找元素"<<endl;
cout<<"5、修改元素"<<endl;
cout<<"7、输出顺序表"<<endl;
cout<<"0、结束"<<endl;
cout<<"请选择(0-7):"<<endl;
cin>>c;
switch(c)
{
case 1:
cout<<"将输入的元素个数:";
cin>>len;
s.input(len);
s.print(len);
break;
case 2:
cout<<"请输入一个要插入的元素:"<<endl;
cin>>x;
cout<<"请输入要插入元素的位置:"<<endl;
cin>>i;
s.insert(data[x],i);
s.print(len);
break;
case 3:
cout<<"请输入一个要删除的元素的位置:"<<endl;
cin>>i;
s.Delete(i);
s.print(len);
break;
case 4:
cout<<"请输入一个要查找的元素:"<<endl;
cin>>j;
s.locate(j);//指针???
break;
case 5:
cout<<"请输入一个要修改的元素:"<<endl;
cin>>a;
cout<<"请输入修改后的元素:"<<endl;
cin>>b;
s.change(a,b);
s.print(len);
break;
case 7:
s.print(len);
}
}while(c!=0);
}

求大神解答> <
展开
 我来答
年轻de心是无敌
2012-12-03
知道答主
回答量:35
采纳率:0%
帮助的人:21.6万
展开全部
//头文件seqlist.h:
#ifndef SEQLIST_H
#define SEQLIST_H
#include <iostream>
#include <stdlib.h>
using namespace std;
typedef int datatype;
const int maxlen=100;
class seqlist{
private:
datatype data[maxlen];
int len;
public:
seqlist(void);
int input(int len);
~seqlist(void);
int length(void) const;
datatype get(int i) const;
int locate(datatype & item) const;
int insert(const datatype & item,int i);
int change(int x,int y);
datatype Delete(int i);
int empty(void)const;
void clear(void);
void print();
};
#endif
seqlist::seqlist():len(0)
{
len=0;
}
seqlist::~seqlist(void){}
int seqlist::input(int s)
{
datatype x;
len=s;
for(int i=1;i<=len;i++)
{
cout<<"请输入第"<<i<<"个元素:";
cin>>x;
data[i-1]=x;
}
cout<<endl;
return 0;
}
int seqlist::length(void)const{return len;}
//==========以下几段都有问题==========//
int seqlist::insert(const datatype & item,int i)
{
if(len>=maxlen)
return 0;
if(i<1||i>len+1)
return 0;
for(int j=len;j>=i-1;j--)
{
data[j]=data[j-1];
}
len++;
data[i-1]=item;
return 1;
}
datatype seqlist::Delete(int i)
{
int j;
if ((i<1)||(i>len)){cout<<"位置超界!"<<endl;}
else if(len==0){cout<<"空表不能删除"<<endl;}
datatype t=data[i-1];
for (j=i;j<len;j++)
{
data[j-1]=data[j];
}
len--;
return t;
}
int seqlist::locate(datatype&item)const{
int i=1;
for(i=1;i<=len;i++)
{
if (data[i-1]==item)
{
cout<<"此元素在第"<<i<<"个位置上"<<endl;
}
}
if(i>len)
{
cout<<"抱歉,您所查找的值并不存在"<<endl<<endl;
}
return i;
}
int seqlist::empty(void)const{if(len==0){cout<<"此表为空表"<<endl;} return 1;}
void seqlist::clear(void){len=0;}
datatype seqlist::get(int i)const{
if(i>=1&&i<=len) return data[i-1];
//return NULL;
}
int seqlist::change(int x,int y)
{
for(int j=1;j<=len;j++)
{
if (data[j]==x)
data[j]=y;
}
return 0;
}
//==========//
void seqlist::print()
{
cout<<"顺序表:"<<endl;
for (int i=1;i<=len;i++)
{
cout<<data[i-1]<<" ";
}
cout<<endl<<endl;
}

#include<iostream>
#include"seqlist.h"
using namespace std;
int main()
{
int n=0,i=0,j=0,c=0;
seqlist s;
do
{
cout<<"1、新建顺序表"<<endl;
cout<<"2、插入元素"<<endl;
cout<<"3、删除元素"<<endl;
cout<<"4、查找元素"<<endl;
cout<<"5、修改元素"<<endl;
cout<<"7、输出顺序表"<<endl;
cout<<"0、结束"<<endl;
cout<<"请选择(0-7):"<<endl;
cin>>c;
switch(c)
{
case 1:
cout<<"将输入的元素个数:";
int len;
cin>>len;
s.input(len);
s.print();
break;
case 2:
cout<<"请输入一个要插入的元素:"<<endl;
int x;
cin>>x;
cout<<"请输入要插入元素的位置:"<<endl;
cin>>i;
s.insert(x,i);
s.print();
break;
case 3:
cout<<"请输入一个要删除的元素的位置:"<<endl;
cin>>i;
s.Delete(i);
s.print();
break;
case 4:
cout<<"请输入一个要查找的元素:"<<endl;
cin>>j;
s.locate(j);//指针???
break;
case 5:
cout<<"请输入一个要修改的元素:"<<endl;
int a;
cin>>a;
cout<<"请输入修改后的元素:"<<endl;
int b;
cin>>b;
s.change(a,b);
s.print();
break;
case 7:
s.print();
}
}
while(c!=0);
}

试试吧.可以运行,不过啦,代码是在太烂了,看起来比写起来还费劲,里面可能还有逻辑错误,你自己在慢慢看吧,还有链表的元素只能为int型,其他类型的要再修改完善,

我有链表类头文件,如果要,留邮箱
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
光点科技
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件... 点击进入详情页
本回答由光点科技提供
牵如意d
2012-12-03 · TA获得超过172个赞
知道答主
回答量:98
采纳率:0%
帮助的人:49.3万
展开全部

你这问题能问的明确点不?这么长的代码看的好费劲哪- -

我大致看了下你的代码,发现有以下几点问题(没有去运行,不保证没遗漏)

  • insert没有错误信息

  • Delete错误信息输出了,但没返回,这个问题可以导致程序崩溃

  • Change函数定义有问题,传进去x,y;函数体内部没见到用过,定义的a,b没有意义

然后你好像对locate不理解

它的作用是在列表中查找你所传入的参数得位置,不存在就输出错误信息,并不是指针

追问
程序可以运行 但输出的时候 case2~case5都没作用

的确不是很了解datatype&item怎么用> <
追答
datatype& 是表示引用,它可以让几个变量指向同一块内存里的值,一个改变其他都会改变
datatype* 是表示指针,它可以让几个变量指向同一块内存
你直接写个简单的例子测试一下就知道了
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
拉布拉多ee
2012-12-17 · TA获得超过1100个赞
知道小有建树答主
回答量:7244
采纳率:0%
帮助的人:1691万
展开全部
queue.Delete(1)在一个恒定
删除(类型&X)的参数参考
定义一个自定义的变量T = 1
然后queue.Delete(T);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式