为什么运行的时候出现内存错误呢?那位大哥大姐帮帮忙,小弟不胜感激!不过中间很多函数都没用到
#include <iostream>
#include <stdlib.h>
using namespace std;
typedef int elemtype;
struct list
{
elemtype * plist;
int size;
int maxsize;
};
//初始化函数
void initlist(list &L)
{
//初始长度为10,以后可以增减,或者附加一个形参给定初始数组长度
L.maxsize=10;
//动态存储空间分配
L.plist=new elemtype[L.maxsize];
if(L.plist=NULL)
{
cout<<"动态可分配内存用完,退出运行";
exit(1);
}
//将顺序表长度置为0
L.size=0;
}
//删除整个顺序表
void clearlist(list &L)
{
if(L.plist!=NULL)
{
delete []L.plist;
L.plist=NULL;
}
L.maxsize=0;
L.size=0;
}
//得到线性表的长度
int lenthlist(list &L)
{
return L.size;
}
//检查线性表是否为空
bool emptylist(list &L)
{
return L.size==0;
}
//得到线性表中指定的序号为pos的元素
elemtype getlist(list &L,int pos)
{
if(pos<1||pos>L.size)//超越边界
{
cerr<<"pos is out range!"<<endl;
}
return L.plist[pos-1];
}
//遍历线性表
void traverselist(list &L)
{
for(int i=0;i<L.size;i++)
cout<<L.plist[i]<<" ";
cout<<endl;
}
//查找具有给定值的第一个元素
bool findlist(list &l,elemtype &item)
{
for(int i=0;i<l.size;i++)
if(l.plist[i]==item)
{
item=l.plist[i];
return true;
}
return false;
}
//更新线性表中具有给定值的第一个元素
bool updatelist(list &L,elemtype &item)
{
for(int i=0;i<L.size;i++)
if(L.plist[i]==item)
{
L.plist[i]=item;
return true;
}
return false;
}
//向线性表按指定条件插入元素
bool insertlist(list &l,elemtype item,int pos)
{
//检查pos值是否有效,若无效则无法插入,返回假
if(pos<-1||pos>l.size+1)
{
cout<<"pos值无效"<<endl;
return false;
}
int i;
if(pos==0) //按升序排列方式插入
{
for(i=0;i<l.size;i++)
if(item<l.plist[i])
break;
pos=i+1;
}
else if(pos==-1) //插到表尾
pos=l.size+1;
//若空间分配完,则重新分配大一倍的空间
if(l.size==l.maxsize)
{
int k=sizeof(elemtype);
l.plist=(elemtype*)realloc(l.plist,2*l.maxsize*k);
if(l.plist==NULL)
{
cout<<"可用存储空间分配完"<<endl;
exit(1);
}
l.maxsize=2*l.maxsize;
}
for(i=l.size-1;i>=pos-1;i--)
l.plist[i+1]=l.plist[i];
l.plist[pos-1]=item;
l.size++;
return true;
}
//从线性表中删除符合给定条件的第一个元素
bool deletelist(list &l,elemtype &item,int pos)
{
//检查是否为空
if(l.size==0)
{
cout<<"线性表为空,退出"<<endl;
return false;
}
if(pos<-1||pos>l.size)
{
cout<<"pos值无效"<<endl;
return false;
}
int i;
if(pos==0) //按item的值来删除
{
for(i=0;i<l.size;i++)
if(item==l.plist[i])
break;
if(i==l.size)
return false;//无元素删除
pos=i+1;
}
else if(pos==-1)//删除表尾
pos=l.size;
item=l.plist[pos-1];//把被删除元素返回item
for(i=pos;i<l.size;i++)
{
l.plist[i-1]=l.plist[i];
}
l.size--;
//若空余空间太多则删除一部分
if(float(l.size)/l.maxsize<0.4&&l.maxsize>10)
{
int k=sizeof(elemtype);
l.plist=(elemtype*)realloc(l.plist,l.maxsize*k/2);
l.maxsize=l.maxsize/2;
}
return true;
}
//对线性表排序
//方法是:先排好前面的,再将后面的插入
void sortlist(list &l)
{
int i,j;
elemtype x;
for(i=1;i<l.size;i++)
{
x=l.plist[i];
for(j=i-1;j>=0;j--)
if(x<l.plist[j])
l.plist[j+1]=l.plist[j];
else break;
l.plist[j+1]=x;
}
}
int main()
{
int a[12]={3,6,9,12,15,18,21,24,27,30,33,36};
int i;
elemtype x;
list t;
initlist(t);
for(i=0;i<12;i++)
{
insertlist(t,a[i],i+1);
}
insertlist(t,48,13);
insertlist(t,40,0);
cout<<getlist(t,4)<<" "<<getlist(t,9)<<endl;
clearlist(t);
return 0;
}