求解释了 大家帮忙看看这个线性表 编译没问题 运行时结果不对
#include<iostream>using namespace std;
#define N 5
#define M 2
//顺序线性表的定义
typedef struct
{
int *data; //存放元素的首地址
int length; //存放的元素个数
int listsize; //总空总个数
}SqList; //顺序线性表的名称
//顺序线性表的初始化
//如果成功,返回1,否则返回0
int Init_Sq(SqList &L)
{
L.data = (int *)malloc(N*sizeof(int));
if(L.data==NULL) //空间分配失败 if(!L.data)
return 0;
L.length = 0;
L.listsize = N;
return 1;
}
//插入
//在第i位置插入值e
int Insert_Sq(SqList &L,int e,int i)
{
int j,*newbase;
if(i<1 || i>L.length+1) //判断位置是否合法
return 0;
if(L.length>=L.listsize) //判断是否放满
{
newbase = (int *)realloc(L.data,(L.listsize+M)*sizeof(int));
if(!newbase) return 0;
L.data = newbase;
L.listsize +=M;
}
//开始插入
//先移动
for(j=L.length-1;j>=i-1;j--)
L.data[j+1] = L.data[j];
L.data[i-1] = e;
L.length++;
return 1;
}
//输出所有元素
void Print_Sq(SqList L)
{
int i;
for(i=0;i<L.length;i++)
cout<<L.data[i]<<' ';
cout<<endl;
}
//删除
//删除第i位置的值,并将值用e保存
int Delete_Sq(SqList &L,int i,int &e)
{
int j;
int *p;
if(i<1 || i>L.length)
return 0;
//开始删除
//移动
e = L.data[i-1]; //保存删除的值
for(j=i;j<=L.length-1;j++)
L.data[j-1] = L.data[j];
L.length--;
return 1;
}
//按值查找
//查找e所在的位置,如果找到,返回位置,如果不成功,返回0
int Search_Sq(SqList L,int e)
{
int j;
for(j=0;j<L.length;j++)
if(L.data[j]==e)
return j+1;
return 0;
}
//获得某位置的值
//如果找到,用e保存值,并返回1,否则返回0
int Get_Sq(SqList L,int i,int &e)
{
if(i<1 || i>L.length)
return 0;
e = L.data[i-1];
return 1;
}
//修改第i位置的值,变成e
int Update_Sq(SqList &L,int i,int e)
{
if(i<1 || i>L.length) return 0;
L.data[i-1] = e;
}
//清空
void Clear_Sq(SqList &L)
{
L.length = 0;
}
int main()
{
SqList L;
int n,e,i;
char *op= NULL;
op = new char[100];
if(Init_Sq(L)==0)
return 0; //程序结束
cout<<"输入线性表的长度:"<<endl;
cin>>n;
cout<<"输入线性表内容:"<<endl;
for(i=1;i<=n;i++)
{
cin>>e;
L.data[i-1]=e;
}
L.length = n;
cout<<"选择你要执行的操作 exit insert delete search clear get update print"<<endl;
cin>>op;
while(op!="exit")
{
if(strcmp(op,"insert")==0) //如果是插入
{
cin>>i>>e;
Insert_Sq(L,e,i);
}
if(strcmp(op,"delete")==0) //如果是删除
{
cin>>i;
Delete_Sq(L,i,e);
}
if(strcmp(op,"search")==0) //是查找search
{
cin>>e;
i = Search_Sq(L,e);
if(i==0)
cout<<"NO element!"<<endl;
else
cout<<i<<endl;
}
if(strcmp(op,"clear")==0) //是clear
Clear_Sq(L);
if(strcmp(op,"get")==0) //是get
{
cin>>i;
if(Get_Sq(L,i,e)==0)
cout<<"Error location!"<<endl;
else
cout<<e<<endl;
}
if(strcmp(op,"update")==0)
{
cin>>i>>e;
Update_Sq(L,i,e);
}
if(strcmp(op,"print")==0)
Print_Sq(L);
cin>>op;
}
return 0;
}
编译都能通过的 也能运行 但结果不对 不知道哪里出问题了 对了 还有就是没有释放空间问题 这个对结果应该没影响的吧