-- 作者:segeon
-- 发布时间:10/9/2008 10:46:00 AM
-- [求助]请教一个c++程序问题
我写的一个合并顺序表的程序有问题,可看了半天也没弄明白,请高人指点。。。 //定义一个动态数组类,该类可实现自动管理数组大小 #include<assert.h> #define maxSize 10 #define increment 10 template <class T> class DynamicArray { private: int size; //数组目前大小 T* elem; //数组元素 public: DynamicArray(); //构造函数 ~DynamicArray(); void AddElem(T a); //往数组中添加新的元素,若发现数组已满,则自动分配新的存储空间 int GetLength();//返回数组的当前长度 T* GetHead(); }; template <class T> DynamicArray <T>::DynamicArray() { size = 0; elem = new T[maxSize]; assert(elem); cout<<"constructor ok!"; } template <class T> DynamicArray <T>::~DynamicArray() { delete [] elem; } template <class T> void DynamicArray <T>::AddElem(T a) { int i,len=size; T* temp; if (size >= maxSize) {//判断数组的现有长度,如果超过了允许的最大值则为数组分配新的存储空间 len += increment; temp=new T[len]; assert(temp); for ( i=0;i<size;i++) temp[i]=elem[i]; delete[] elem; elem = new T[len]; //assert (elem); i=0; while ( i< size ) elem[i++] = temp[i++]; delete[] temp; elem[size] = a;} elem[size] = a; size++; } template <class T> int DynamicArray <T>::GetLength() { return size; } template <class T> T* DynamicArray<T>:: GetHead() { return elem; } ----------------------- //比较两个顺序表的大小 #include <iostream> #include "dynamicArray.h" using namespace std; int Compare(DynamicArray<char> a,DynamicArray<char> b) { char* pa,*pb; pa=a.GetHead(); pb=b.GetHead(); while ( *pa && *pb && *pa == *pb ) { pa++; pb++; } if ( !*pa && !*pb ) return 0;//两个字符数组相等 if ( *pa == NULL && *pb != NULL) return -1; //说明a<b if ( *pa && *pb && *pa<*pb ) return -1; //也说明a<b return 1; //否则a>b } int main() { DynamicArray<char> array1,array2; char ch; cout<<"请输入第一个字符数组,以“*”结束:"<<endl; cin>>ch; while ( ch != '*') {array1.AddElem(ch); cin>>ch;} cout<<"请输入第二个字符数组,以“*”结束:"<<endl; cin>>ch; while ( ch != '*') {array2.AddElem(ch);cin>>ch;} switch ( Compare( array1,array2 )) { case 0 : cout<<"两个数组相等!";break; case -1: cout<<"第一个数组小于第二个数组";break; case 1: cout<<"第一个数组大于第二个数组";break; default: cout<<"有错误!";break; } }
|