编程论坛's Archiver

Jia_Jian 发表于 2008-5-7 23:21

自己编写的一个向量线性表的程序,出现“遇到问题需要关闭”???

我自己写的一个程序,编译没有错误,但是运行完后会出现“Vector.h遇到问题需要关闭”,这是什么原因啊??
下面是头文件Vector.h
#include<iostream>
#define DefaultSize 100;
template<class T>
class Vector
{
        private:
                T * elements;
                int ArraySize,VectorLength;
        public:
                Vector(int sz);
                ~Vector(void){delete [] elements;}
                int GetLength(void){return VectorLength;};
                T Getnode(int i);
                int Find(T & x);
                bool Insert(T & x,int i);
                bool Remove(int i);
                void Intersection(T & Va,T & Vb);
                void Union(T & Va,T & Vb);
};


template<class T >
Vector<T>::Vector(int sz)
{
        if(sz<0)
        {
                cerr<<"input a right number,please "<<endl;
        }
        else {
                ArraySize = sz;
                elements = new T[ArraySize];
                VectorLength = 0;
        }
}



template<class T >
T Vector<T>::Getnode(int i)
{
        if( i<0 || i>VectorLength)
        {
                return NULL;
        }
        else
        {
                return  elements[i];
        }
}


template<class T>
int Vector<T>::Find(T & x)
{
        for(int i=0;i<VectorLength;i++)
        {
                if(elements[i] == x)
                        return i;
        }
        return -1;
}


template<class T>
bool Vector<T>::Insert(T & x,int i)
{
        if(i<0 || i>VectorLength || VectorLength == ArraySize)
        {
                cerr<<"input a rigth number"<<endl;
                return false;

        }
        else
        {
                VectorLength++;
                for(int j = VectorLength-1;j>=i;j++)
                {
                        elements[j] = elements[j-1];
                }
                elements[i] = x;
                return true;
        }
}


template<class T>
bool Vector<T>::Remove(int i)
{
        if(i<0 || i>VectorLength)
        {
                cerr<<"input  a right number "<<endl;
                return false ;
        }
        else
        {
                for(int j = i;j<VectorLength-1;j++)
                {
                        elements[j] = elements[j+1];
                }
                VectorLength--;
                return true;
        }
}


template<class T>
void Vector<T>::Intersection(T & Va,T & Vb)
{
        int n = Va.GetLength();
        int m = Vb.GetLength();
        for(int i= 0;i<m;i++)
        {
                T x = Vb.Getnode(i);
                int k = Va.Find(x);
                if(k==-1)
                {
                        Vb.Remove(i);
                        m--;
                }
        }
}


template<class T>
void Vector<T>::Union(T & Va,T & Vb)
{
        int n = Va.GetLength();
        int m = Vb.GetLength();
        for(int i=0;i<m;i++)
        {
                T x = Vb.Getnode(i);
                int k= Va.Find(x);
                if(k==-1)
                {
                        Va.Insert(x,n);
                        n++;
                }
        }
}

下面是主程序main

#include<iostream>
#include"Vector.h"
using namespace std;
int main()
{
        int n,s,m;
        cout<<"请输入人数:";cin>>n;
        cout<<endl;
        cout<<"请输入从第几个人开始:";cin>>s;
        cout<<endl;
        cout<<"请输入报到何数为止:";cin>>m;
        cout<<endl;
        int k=1;
        Vector<int> P(n);
        for(int i=0;i<n;i++)
        {
                P.Insert(k,i);
                k++;
        }
        int sl=s;


        for(int j=n;j>=1;j++)
        {
                sl = (sl+m-1)%j;
                if(sl==0)sl=j;
                int w=P.Getnode(sl-1);
                P.Remove(sl-1);
                P.Insert(w,n-1);
        }
        int a;
        int b;
        for(b=0;b<n;b++)
        {
                a = P.Getnode(b);
                cout<<a<<"   ";
        }


               
        return 0;
}

这是有关数据结构的线性表的。。

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.