數據結構一順序表

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章