我的编译环境是使用VS2008,使用模板类封装了顺序表的各个功能的实现: 头文件: // stdafx.h : 标准系统包含文件的包含文件, // 或是经常使用但不常更改的 // 特定于项目的包含文件 // /************************************************************************/ /* Author : bizhu12 */ /* 环境 : VS2008 */ /* */ /************************************************************************/ #pragma once #include "targetver.h" #include <stdio.h> #include <tchar.h> #define Error 0 #ifndef SqList_H_ #define SqList_H_ template<class T> class SqList { public: SqList(); //构造函数 T *InitList(int length); //初始化顺序表 int CreateList(T *L,int &length); //创建顺序表 int is_Empty(T *L); //判断是否为空,是空返回1,否则0 int DestroyList(T *L); //若顺序表不为空,则删除顺序表 int ClearList(T *L); //清空顺序表 T GetValues(T *L,int Seat); //获取相应位置的值,Seat位置 int InsertList(T *L,int Seat, T Val); //插入顺序表 void PrintList(T *L); //打印顺序表 T DeleteVal(T *L, int Seat); //删除某个位置的值 private: int ListSize; //顺序表的大小 int ListLength; //顺序表的实际长度 T *pData; //顺序表指针 }; #endif // TODO: 在此处引用程序需要的其他头文件 Cpp文件: // DSList.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> using namespace std; //构造函数 template<class T> SqList<T>::SqList() { ListLength = 0; ListSize = 0; } //初始化 template<class T> T *SqList<T>::InitList(int Size) //Size为初始化顺序表的大小 { pData = (T*)malloc(Size*sizeof(T)); //为顺序表分配内存 if (!pData) { //内存分配不成功 return NULL; exit(Error); } else { memset(pData,0,Size*sizeof(T)); //清空顺序表 ListSize = Size; return pData; } } //创建顺序表 template<class T> int SqList<T>::CreateList(T *L,int &length) //length为创建顺序表的长度 { int i = 0; if (length > ListSize) //若超过初始化顺序表长度,则重新分配内存 { T * pBase; pBase = (T*)realloc(L,length*sizeof(T));//重新分配内存,使用pBase指向分配的内存, //这样分配内存是为了防止重新分配内存出错 if (!pBase) { return Error; } pData = L = pBase; ListSize = length; } cout << endl << "输入" << length << "个数" << endl; while(i < length) { cin >> L[i]; i++; } ListLength = i; return 1; } //判断顺序表是否为空 template<class T> int SqList<T>::is_Empty(T *L) { if (L) { return 0; } else if (!L) { return 1; } } //删除顺序表 template<class T> int SqList<T>::DestroyList(T *L) { if (!is_Empty(L)) { for(int i = 0; i < ListSize; i++) { free(L[i]); } pData = NULL; L = NULL; ListLength = ListSize = 0; return 1; } else return 0; //失败 } //清空顺序表 template<class T> int SqList<T>::ClearList(T *L) { if (L) { memset(L,0,ListLength * sizeof(T)); return 1; } else return 0; //失败 } //获取相应位置的值 template<class T> T SqList<T>::GetValues(T *L,int Seat) { //判断顺序表是否为空或位置是否超过长度 if (L && (Seat <= ListLength)) { return L[Seat-1]; } else { return 0; //失败 } } //插入 template<class T> int SqList<T>::InsertList(T *L,int Seat, T Val) { int i = 0; if( L && (Seat <= ListLength) && (Seat >= 0) ) { for (i = ListLength; i >= Seat; i--) { L[i] = L[i-1]; } L[i] = Val; ListLength += 1; return 1; } else return 0; } //打印 template<class T> void SqList<T>::PrintList(T *L) { if (L) { cout << "顺序表的值: "; for (int i = 0; i < ListLength ; i++) { cout << L[i] << " " ; } cout << endl; } else cout << "顺序表为空" <<endl; } //删除某个位置的值 template<class T> T SqList<T>::DeleteVal(T *L, int Seat) { if (L) { T val; int i = 0; for ( i = Seat; i < ListLength; i++) { L[i-1] = L[i]; } val = L[i]; memset(&L[i],0,sizeof(T)); ListLength -= 1; return val; } else return 0; }