シーケンス表の使用
順序表の作成と基本操作問題の説明を上手にマスターすることを助けます.順序表を設計し、基本操作を実現します.基本的な要求:順序表を作成します.(1)データを入力します.(2)データの挿入、削除、検索、出力などの基本的な操作を実現する.(3)集合の並べ替え、引き渡し、二つの順序表の統合を実現する.
#include
#include
using namespace std;
const int Size=100;
template <class T>
class SeqList{
protected:
int maxSize; //
int last; //
T *data; //
void reSize(int size); //
public:
SeqList(int sz=Size); //
SeqList(const SeqList &S); //
SeqList &operator=(SeqList &S); //
~SeqList() {delete []data;} //
int Size() const {return maxSize;} //
int Length() const {return (last+1);} //
bool isEmpty() {return (last==-1)? true:false;} //
bool isFull() {return (maxSize==last+1)? true:false;} //
int Search1(T &x)const; // ,
int Search(T &x)const; // ,
int Locate(int i)const; // i
bool getData(int i,T &x)const; // i
bool setData(int i,T &x); // i
bool Insert(int i,T &x); // i
bool Remove(int i); // i
void Sort(); //
void Input(); //
void Output(); //
void Use(int size) {reSize(size);} // reSize
void Union(SeqList L); //
void Intersection(SeqList L); //
void Union1(SeqList L); //
void delete1(T &x);
};
template <class T>
SeqList::SeqList(int sz){
if(sz>0){
maxSize=sz;
last=-1;
data=new T[sz];
if(data==NULL) {
cout<<" !"<exit(1);
}
}
}
template <class T>
SeqList::SeqList(const SeqList &S) {
maxSize=S.Size();
last=S.Length()-1;
T value;
data=new T[maxSize];
if(data==NULL) {
cout<<" !"<exit(1);
}
for(int i=1;i<=last+1;i++) {
S.getData(i,value);
data[i-1]=value;
}
}
template <class T>
SeqList &SeqList::operator=(SeqList &S) {
maxSize=S.Size();
last=S.Length()-1;
T value;
data=new T[maxSize];
if(data==NULL) {
cout<<" "<exit(1);
}
for(int i=1;i<=last+1;i++) {
S.getData(i,value);
data[i-1]=value;
}
return (*this);
}
template <class T>
int SeqList::Search1(T&x)const{
int i;
for(i=0;i<=last;i++) {
if(data[i]==x) {
cout<" is located at index of ";
cout<1<return i+1;
}
}
cout<" is not found"<return -1;
}
template <class T>
int SeqList::Search(T&x)const{
int i;
for(i=0;i<=last;i++) {
if(data[i]==x) {
cout<1<return i+1;
}
}
return -1;
}
template <class T>
int SeqList::Locate(int i)const {
if(i>=1&&i<=last+1)
return i;
return -1;
}
template <class T>
void SeqList::delete1(T &x) {
int j;
for(int i=0;i<=last;i++) {
if(data[i]==x) {
data[i]=data[i+1];
j=i+1;
break;
}
}
for(int z=j;z<=last;z++) {
data[z]=data[z+1];
}
last--;
}
template <class T>
bool SeqList::getData(int i,T &x)const {
if(i>=1&&i<=last+1) {
x=data[i-1];
return true;
}
return false;
}
template <class T>
bool SeqList::setData(int i,T &x){
if(i>=1&&i<=last+1) {
data[i-1]=x;
return true;
}
return false;
}
template <class T>
bool SeqList::Insert(int i,T &x){
if(last+1==maxSize) return false;
if(i<0||i>last+1) return false;
int j;
for(j=last;j>=i;j--) {
data[j+1]=data[j];
}
data[i]=x;
last++;
return true;
}
template <class T>
bool SeqList::Remove(int i){
if(last==-1) return false;
if(i<1||i>last+1) return false;
for(int j=i-1;j1];
}
last--;
return true;
}
template <class T>
void SeqList::Input() {
while(1) {
int x;
cin>>x;
last=x-1;
if(last>=0&&last<=maxSize-1)
break;
}
for(int j=0;j<=last;j++) {
cin>>data[j];
}
}
template <class T>
void SeqList::Output() {
for(int j=0;j<=last;j++) {
cout<<" "<cout<template <class T>
void SeqList::Sort() {
T value;
for(int i=1;i<=last;i++) {
for(int j=0;j<=last-i;j++) {
if(data[j]>data[j+1])
{
value=data[j];
data[j]=data[j+1];
data[j+1]=value;
}
}
}
}
template <class T>
void SeqList::reSize(int size) {
if(size<=0) cout<<" "<if(size>maxSize) {
T *newarray=new T[size];
if(newarray==NULL) {
cout<<" !"<exit(1);
}
int j=last+1;
T *a=data;
T *b=newarray;
while(j--) {
* b++=* a++;
}
delete []data;
data=newarray;
maxSize=size;
}
}
template <class T>
void SeqList::Union(SeqList L){
int m=L.Length();
int n=this->Length();
int flag;
T x;
for(int i=1;i<=n;i++) {
this->getData(i,x);
flag=L.Search(x);
if(flag==-1) {
L.Insert(m,x);
m++;
}
}
cout<<"A union B is";
L.Output();
}
template<class T>
void SeqList::Intersection(SeqList L) {
int m=L.Length();
int flag;
T x;
int i=1;
while(i<=m) {
L.getData(i,x);
flag=this->Search(x);
if(flag==-1) {
L.Remove(i);
m--;
}
else i++;
}
cout<<"A cross B is";
L.Output();
}
template <class T>
void SeqList::Union1(SeqList L){
this->Sort();
L.Sort();
int m=this->Length();
int n=L.Length();
int flag;
T x;
for(int i=1;i<=n;i++) {
L.getData(i,x);
flag=this->Search(x);
if(flag==-1) {
this->Insert(m,x);
m++;
}
}
cout<<"A union B in sequence is";
this->Output();
}
int main()
{
SeqList<int> com(20);
com.Input();
cout<<"A is created as:";
com.Output();
int x,y;
cin>>x>>y;
com.Insert(x-1,y);
cout<<"After Inserted A is";
com.Output();
int z;
cin>>z;
com.delete1(z);
cout<<"After deleted A is";
com.Output();
int q;
cin>>q;
com.Search1(q);
cin>>q;
com.Search1(q);
SeqList<int> con(20);
con.Input();
com.Intersection(con);
com.Union(con);
com.Union1(con);
return 0;
}