| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 259 人关注过本帖
标题:[求助]顺序表的问题,为什么总是出现内存错误呢?
只看楼主 加入收藏
yeajay
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2007-11-1
收藏
 问题点数:0 回复次数:0 
[求助]顺序表的问题,为什么总是出现内存错误呢?

为什么运行的时候出现内存错误呢?那位大哥大姐帮帮忙,小弟不胜感激!不过中间很多函数都没用到

#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;
}

搜索更多相关主题的帖子: 内存 顺序 
2007-11-01 14:00
快速回复:[求助]顺序表的问题,为什么总是出现内存错误呢?
数据加载中...
 
   



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

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