爱编程吧 关注:78贴子:554
  • 3回复贴,共1

【求教】数据结构顺序表的基本功能

只看楼主收藏回复

编写一个程序,实现顺序表的各种基本运算,并在此基础上设计一个主程序完成如下功能:
(1) 初始化顺序表L。
(2) 依次采用尾插法插入a,b,c,d,e元素。
(3) 输出顺序表L及L的长度。
(4) 判断顺序表L是否为空。
(5) 输出顺序表L的第3个元素。
(6) 输出元素d的位置。
(7) 在第4个元素位置上插入f元素。
(8) 删除L的第3个元素。
(9) 输出顺序表L。
(10) 释放顺序表L。
下面是我的程序(书上摘下来的X﹏X)。。可是运行的时候输不出正确的顺序表。。。求指点,麻烦大家了
头文件:
#include<iostream>
#include<stdlib.h>
const int defaultSize=100;
template<class T>
class seqList{
protected:
T *data;
int maxSize;
int last;
void reSize(int newSize);
public:
seqList(int sz=defaultSize);
seqList(seqList<T>& L);
~seqList(){delete[] data;}
int size(){return maxSize;}
int length()const{return last;}
int search(T& x)const;
int locate(int i)const;
bool getData(int i,T& x)const{
if(i>=0&&i<last){
x=data[i];
return true;
}
return false;
}
void setData(int i,T& x){
if(i>=0&&i<last){
data[i]=x;
}
}
bool insert(int i,T& x);
bool remove(int i,T& x);
bool isEmpty(){return last==0;}
bool isFull(){return last==maxSize;}
void input();
void output();
seqList<T>operator=(seqList<T>& L);
};
cpp文件:
#include <iostream>
#include"linearList.h"//声明一个顺序表
using namespace std;
template<class T>
seqList<T>::seqList(int sz)
{ //构造函数,通过指定参数SZ定义数组的长度
maxSize=sz;
last=0;
data=new T[maxSize];//创建顺序表存储数组
if(data==NULL)//动态分配失败
{
cout<<"存储分配错误!"<<endl;
exit(1);
}
}//
template<class T>
seqList<T>::seqList(seqList<T>& l){//复制构造函数,用参数表中给出的已有顺序表初始化新建的顺序表
maxSize=l.size();
last=l.length();
T value;
data=new T[maxSize];//创建顺序表存储数组
if(data==NULL)//动态分配失败
{
cout<<"存储分配错误!"<<endl;
exit(1);
}
for(int i=0;i<last;i++)
{
l.getData(i,value);
data[i]=value;
}
}
template<class T>
void seqList<T>::reSize(int newSize){//私有函数:扩充顺序表的储存数组空间大小,新数组的元素个数为newsize
if(newSize!=maxSize){//检查参数的合理性
cout<<"无效的数组大小"<<endl;
return;
}
if(newSize!=maxSize){
T* newarray=new T[newSize];//建立新数组
if(newarray==NULL){
cout<<"存储分配错误"<<endl;
exit(1);
}
for(int i=0;i<last;i++){
newarray[i]=data[i];
}
delete[]data;//删老数组
data=newarray;
maxSize=newSize;//复制新数组
}
}
template<class T>
int seqList<T>::search(T& x)const{
//搜索函数:在表中顺序搜索与给定值X匹配的表象,找到则函数返回该表项是第几个元素,否则函数返回-1,表示搜索失败
for(int i=0;i<=last;i++){
if(data[i]==x)
{
cout<<i+1;
return i//顺序搜索
}
}
return -1;//搜索失败
}
template<class T>
int seqList<T>::locate(int i)const{
//定位函数:函数返回第i个表项的位置,否则返回-1,表示定位失败
if(i>=0&&i<last)
return i;
return -1;
}
template<class T>
bool seqList<T>::insert(int i,T& x){//将新元素X插入到表中第i个表项后,函数返回插入成功信息,若插入成功的,则返回TRUE;否则返回FALSE。
if(last==maxSize)
return false;//表满,不能插入
if(i<0||i>last)
return false;//参数i不合理,不能插入
for(int j=last-1;j>=i;j--)
data[j+1]=data[j];//依次后移,空出第i号位置
data[i]=x;//插入
last++;//最后位置加1
return true;//插入成功
}
template<class T>
bool seqList<T>::remove(int i,T& x){//从表中删除第i个表项,通过引用型参数X返回删除的元素值。函数返回删除成功信息,若删除成功则返回true,否则返回false.
if(last==0)
return false;//表空,不能删除
if(i<0||i>=last)
return false;//参数i不合理,不能删除
x=data[i];//存被删元素的值
for(int j=i+1;j<last;j++)
data[j-1]=data[j];//依次前移,填补
last--;//最后位置减1
return true;//删除成功
}
template<class T>
void seqList<T>::input(){//从标准输入(键盘)逐个数据输入,建立顺序表
cout<<"开始建立顺序表,请输入元素个数:";
while(cin>>last){//输入元素最后位置
if(last>maxSize)
cout<<"输入有误,范围不能超过"<<maxSize<<":";
else
break;
}
for(int i=0;i<last;i++)//逐个输入表元素
{
cin>>data[i];
cout<<i<<endl;
}
}
template<class T>
void seqList<T>::output(){//将顺序表全部元素输出到屏幕上
for(int i=0;i<last;i++)
cout<<i+1<<":"<<data[i]<<endl;
}
template<class T>
seqList<T> seqList<T>::operator=(seqList<T>& l){//重载操作
maxSize=l.size();
last=l.length();//顺序表的长度
T value;
data=new T[maxSize];
if(data==NULL){
cout<<"存储分配错误!"<<endl;
exit(1);
}
for(int i=0;i<last;i++)
{
l.getData(i,value);
data[i]=value;
}
}
int main()
{
seqList<int> seq(100);
int a,b,c,d,e,f;
cin>>a>>b>>c>>d>>e;
seq.insert(0,a);
seq.insert(1,b);
seq.insert(2,c);
seq.insert(3,d);
seq.insert(4,e);
seq.output();
cout<<seq.length()<<endl;
int x;
seq.getData(2,x);
cout<<"输出顺序表的第3个元素:"<<x<<endl;
cout<<"元素d的位置:";
seq.search(d);
cout<<endl;
cout<<"在第4个元素位置上插入f元素:";
cin>>f;
seq.insert(3,f);
seq.output();
cout<<"删除L的第三个元素:"<<endl;
seq.remove(2,c);
seq.output();
return 0;
}


IP属地:广东1楼2015-04-16 15:02回复
    调试看看 跟踪下错误


    IP属地:北京来自Android客户端2楼2015-05-20 00:03
    回复
      跟踪错误试试


      3楼2018-06-07 14:20
      回复
        不知道题主解决了问题没有


        4楼2018-06-07 14:51
        回复