读书人

程序运作到最后不结束也就是不出现请

发布时间: 2013-10-12 11:54:04 作者: rapoo

程序运行到最后不结束,也就是不出现请按任意键结束,在这里死了
//顺序表的类
//文件名:p046_SeqList.h
#ifndef SEQLIST_H
#define SEQLIST_H
#include<iostream>
#include<stdlib.h>//使用exit(1)
using namespace std;
const int defaultSize=100;
template<class T>
class SeqList{
protected:
T* data;//存放数组
int maxSize;//最大可容纳表项的项数
int last;//当前已存表项的最后位置(0开始),表空时为-1
void reSize(int newSize);//改变data数组空间的大小
public:
SeqList(int sz=defaultSize);//构造函数
SeqList(SeqList<T>& L);//复制构造函数
~SeqList(){delete[] data;}//析构函数
int Size()const{return maxSize;}//返回数组data的元素个数
int Length()const{return last+1;}//返回表长度
bool getData(int i, T& x)const{//取第i个表项的值
if(i>0 && i<=last+1){ x=data[i-1]; return true; }
else return false;
}
void input();//输入函数
void output();//输出函数

int Search(T& x)const;//搜索x在表中位置,返回表项序号
int Locate(int i)const;//定位第i个表项,返回表项序号
void setData(int i,T& x)//用x修改第i个表项的值
{ if(i>0 && i<=last+1) data[i-1]=x; }
SeqList<T>& operator=(SeqList<T>& L);//表整体赋值
bool Insert(int i,T& x);//在第i个表项后插入x
bool Remove(int i,T& x);//删除第i个表项,通过x返回
bool IsEmpty()const//10 判表空否
{ return (last==-1)?true:false;}
bool IsFull()const//11 判表满否
{ return (last==maxSize-1)?true:false;}

};

//(1-1) 改变数组空间大小函数reSize的实现;
template<class T>
void SeqList<T>::reSize(int newSize)
{
if(newSize<=0)
{
cerr<<"无效的数组大小"<<endl;
return;
}
if(newSize!=maxSize)
{
T *newarray=new T[newSize];
if(newarray==NULL)
{
cerr<<"存储分配错误"<<endl;
exit(1);
}
int n=last+1;
T *srcptr=data;
T *destptr=newarray;
while(n--)
*destptr++=*srcptr++;
delete []data;
data=newarray;
maxSize=newSize;
}
}

//(1-2) 构造函数的实现;
template<class T>
SeqList<T>::SeqList(int sz)
{
if(sz>0)
{
maxSize=sz;last=-1;
data=new T[maxSize];
if(data==NULL)
{
cerr<<"存储分配错误"<<endl;
exit(1);
}
}
else
{
cerr<<"无效的数组大小"<<endl;
return;
}
}
//(1-3) 复制构造函数的实现;
template<class T>
SeqList<T>::SeqList(SeqList<T> &L)
{
maxSize=L.maxSize;last=L.last;
data=new T[maxSize];
if(data==NULL)
{
cerr<<"存储分配错误"<<endl;
exit(1);
}
for(int i=1;i<=last+1;i++)
data[i-1]=L.data[i-1];
}
//(1-4) 输入函数input的实现(注意:若数组空间不够大,要用函数reSize扩大数组空间);
template<class T>
void SeqList<T>::input()
{
cout<<"开始建立顺序表,请输入表中元素个数:";
int i;
cin>>i;last=i-1;
if(last>=maxSize-1)
maxSize=last+1;
for(int i=0;i<=last;i++)
{
cin>>data[i];cout<<i+1<<endl;
}
}
//(1-5) 输出函数output的实现;
template <class T>
void SeqList<T>::output()
{
cout << "顺序表当前元素最后位置为:" << last << endl;
for(int i=0; i<=last; i++)
cout << "#" << i+1 << " : " << data[i] << endl;
}
//(2-1) 搜索函数Search的实现;
template<class T>
int SeqList<T>::Search(T& x)const
{
for(int i=0;i<=last;i++)
if(data[i]==x)return i+1;
return 0;
}
//(2-2) 定位函数Locate的实现;
template<class T>
int SeqList<T>::Locate(int i)const
{
if(i>=1&&i<=last+1)
return i;
else
return 0;
}

//(2-3) 运算符"="重载的实现;
template<class T>
SeqList<T>& SeqList<T>::operator=(SeqList<T>& L)
{
maxSize=L.maxSize;last=L.last;
T *l=new T[maxSize];
if(l==NULL)
{
cerr<<"存储分配错误"<<endl;
exit(1);
}
delete []data;
data=l;
for(int i=1;i<=last+1;i++)
data[i-1]=L.data[i-1];
return *this;
}

template<class T>
bool SeqList<T>::Insert(int i,T& x)
{
if(IsFull())
{
maxSize=maxSize*2;
reSize(maxSize);
}
if(i<0||i>last+1)
return false;
for(int j=last;j>=i;j--)
data[j+1]=data[j];
data[i]=x;
last++;
return true;
}

template<class T>
bool SeqList<T>::Remove(int i,T& x)
{
if(IsEmpty())
return false;
if(i<1||i>last+1)
return false;
x=data[i-1];
for(int j=i;j<=last;j++)
data[j-1]=data[j];
last--;
return true;
}
#endif



#include"p046_SeqList.h"
void main(){

//测试插入函数Insert
SeqList<char> L1(3);


L1.input();//输入4个字符:A,B,C,D,回车分隔
L1.output();
char ch='F';
if(L1.Insert(6,ch)) cout<<"插入成功!"<<endl;
else cout<<"插入失败!"<<endl;
L1.output();
if(L1.Insert(3,ch)) cout<<"插入成功!"<<endl;
else cout<<"插入失败!"<<endl;
L1.output();

//测试删除函数Remove
if(L1.Remove(6,ch)) cout<<"删除成功!"<<"ch="<<ch<<endl;
else cout<<"删除失败!"<<endl;
L1.output();
if(L1.Remove(3,ch)) cout<<"删除成功!"<<"ch="<<ch<<endl;
else cout<<"删除失败!"<<endl;
L1.output();
}

[code=c]
[/code] C++ 程序停止
[解决办法]
//(1-4) 输入函数input的实现(注意:若数组空间不够大,要用函数reSize扩大数组空间);template<class T>
void SeqList<T>::input()
{
cout<<"开始建立顺序表,请输入表中元素个数:";
int i;
cin>>i;last=i-1;
if(last>=maxSize-1)
maxSize=last+1;
for(int i=0;i<=last;i++)
{
cin>>data[i];cout<<i+1<<endl;
}
}
实际上这个注意,你根本就忽略了。

读书人网 >C++

热点推荐