<span style="white-space:pre"> </span>數據結構第一章實驗,寫了一個簡單版本的順序表,添加了一個簡單的菜單。
<span style="white-space:pre"> </span>
#include <iostream.h>
#include<stdlib.h>
const int defaultSize=100;
class SeqList{
protected:
int *data;
int maxSize;
int last;
// void reSize(int newSize);//改變數組空間大小
public:
SeqList(int sz=defaultSize);
// SeqList(SeqList<T>& L);
~SeqList(){delete[] data;}
int Size()const
{return maxSize;}
int Length()const
{return last+1;}
void Search()const;//查詢
void Locate()const;//定位
bool getData(int i,int& x)const
{if(i>1&&i<last+1){x=data[i-1];return true;}else return false;}
bool setData(int i,int& x)
{if(i>1&&i<last+1){x=data[i-1];}}
bool Insert();//插入
bool Remove();//刪除
bool IsEmpty(){return last==-1?true:false;}
bool IsFull(){return last==maxSize-1?true:false;}
void input();//寫入
void output();//輸出
void upData();//更新
// SeqList<T>operator=(SeqList<T>& L);
};
SeqList::SeqList(int sz){ //構造函數
if(sz>0)
{
maxSize=sz;last=-1;
data=new int[maxSize];
if(data==NULL)
{
cerr<<"error!!"<<endl;exit(1);
}
}
}
void SeqList::input(){ //輸入
cout<<"開始建立順序表,輸入表中元素個數:";
while(1)
{
cin>>last;
if(last<=maxSize-1)break;
cout<<"輸入有誤,範圍不能超過"<<maxSize-1<<":";
}
for(int i=0;i<last;i++)
{cin>>data[i];cout<<i+1<<"\t";}
}
void SeqList::output(){ //輸出
cout<<endl;
cout<<"最後位置爲:"<<last<<endl;
for(int i=0;i<last;i++)
{cout<<"#"<<i+1<<":"<<data[i]<<endl;}
}
bool SeqList::Insert(){ //插入
if(last==maxSize-1)return false;
int i,x;
cout<<endl;
cout<<"輸入插入的數字:";
cin>>x;
cout<<"輸入插入的位置:";
cin>>i;
if(i<0||i>maxSize-1)return false;
for(int j=last;j>=i;j--)
data[j+1]=data[j];
data[i]=x;
last++;
cout<<"插入成功!"<<endl;
return true;
}
bool SeqList::Remove(){ //刪除
int i,x;
if(last==-1)return false;
cout<<"\n請輸入刪除的位置:";
cin>>i;
if(i<0||i>maxSize-1)return false;
x=data[i-1];
for(int j=i;j<=last;j++)
data[j-1]=data[j];
last--;
cout<<"delete成功!刪除的數爲:"<<x<<endl;
return true;
}
void SeqList::Search()const{ //查詢
int x;
cout<<"\n請輸入查詢的數:";
cin>>x;
for(int i=0;i<=last;i++)
if(data[i]==x)
cout<<"數字在位置:"<<i+1;
}
void SeqList::Locate()const{ //定位
int i;
cout<<"輸入位置:";
cin>>i;
if(i>=1||i<=last+1)
cout<<"位置上的數爲:"<<data[i-1];
}
void SeqList::upData(){ //更新
int i,x;
cout<<"輸入位置:";
cin>>i;
if(i<1||i>last+1) return;
cout<<"輸入更新的數據:";
cin>>x;
data[i-1]=x;
cout<<"\n更新成功"<<endl;
}
int main()
{
int n;
SeqList s1(30);
s1.input();
while(1){
cout<<"\n------------------------"<<endl;
cout<<"1,插入"<<endl;
cout<<"2,刪除"<<endl;
cout<<"3,查找"<<endl;
cout<<"4,定位"<<endl;
cout<<"5,輸出"<<endl;
cout<<"6,更新"<<endl;
cout<<"7,退出"<<endl;
cout<<"-----------------------"<<endl;
cout<<"輸入選項:";
cin>>n;
switch(n){
case 1:
s1.Insert();break;
case 2:
s1.Remove();break;
case 3:
s1.Search();break;
case 4:
s1.Locate();break;
case 5:
s1.output();break;
case 6:
s1.upData();break;
case 7:
exit(1);
default:
cout<<"輸入有誤,請重試"<<endl;
}
}
//
//
//
return 0;
}