/////////////////////////////////// //日期:2014-09-30
//作者:Davis
//功能:顺序表类的实现 // #include "SqList.h" ////////////////////////////////// template<class T> class SqList { private: T* elem; //表首址 int length; //表长 int listsize; //表容量 public: //构造函数,创建容量为m的空表 SqList(int m) { elem = new T[m]; //申请表空间 length = 0; //空表,表长为0 listsize = m; //表容量为m } //析构函数,删除表空间 ~SqList() { delete [] elem; //释放表空间 length = 0; listsize = 0; } //创建具有n个元素的线性表 void CreateList(int n) { if(n>listsize) throw"参数非法"; cout<<"请依次输入"<<n<<"个元素值:"<<endl; for(int i =1;i<=n;i++) cin>>elem[i-i]; length = n; } //在表中第i个位置插入元素 void Insert(int i,T e) { //在第i个位置插入元素,如果不能插入,显示异常信息 if(length>=listsize)throw"上溢"; if(i<1||i>length+1)throw"插入位置异常"; for(int j = length;j>=i;j--) elem[j] = elem[j-1]; elem[i-1] = e; length++; } //删除表中的第i个元素 T Delete(int i) { T x; if(length == 0)throw"下溢"; if(i<1||i>length+1)throw"删除位置异常"; x=elem[i-1]; for(int j=i;j<length;j++) elem[j-1] = elem[j]; length--; return x; } //获取第i个元素的值 T GetElem(int i) { T e; if(i<1||i>length)throw"位置不合法"; e = elem[i-1]; return e; } //元素定位 int Locate(T e) { for(int i = 0;i<length;i++) if(elemi[i] == e) return i+1; //找到,返回该元素在表中的位序 return 0; //未找到,返回0 } //清空表 void Clear() { length =0; } //测表是否空 int Empty() { if(length == 0)//判断表,若空,返回1. return 1; else //不空,返回0 return 0; } //测表是否满 int Full() { if(length == listsize) //表满,返回1 return 1; else //不满,返回0 return 0; } //返回表长 int Length() { return length; } //输出表元素 void ListDisp() { for(int i = 0;i<length;i++) { cout<<i+1<<"\t"; cout<<elem[i]<<endl; } } }
///////////////////////////////////////////////// // 顺序链表的测试 ///////////////////////////////////////////////// // SqList_main.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include "SqList.h" #include "process.h" #include<iostream> using namespace std; char pause; typedef int T; //T表示int类型 int _tmain(int argc, _TCHAR* argv[]) { int i; T e; SqList<int>L(20); //建立容量为20、元素类型为整形的空顺序表 system("cls"); //执行系统命令,清屏 int choice; do { cout<<"1-创建顺序表\n"; cout<<"2-在链表第i个位置插入元素\n"; cout<<"3-删除顺序表中第i个位置的元素\n"; cout<<"4-返回第i个元素的值\n"; cout<<"5-元素定位\n"; cout<<"6-清空表\n"; cout<<"7-测表空\n"; cout<<"8-测表满\n"; cout<<"9-测表长\n"; cout<<"10-显示表长\n"; cout<<"11-退出\n"; cout<<"Enter choice:"; cin>>choice; switch(choice) { case 1://创建表 cout<<"请输入要创建的顺序表中元素的个数:"; cin>>i; cout<<endl; try { L.CreateList(i); } catch(char* err) { cout<<err<<endl; } break; case 2://元素插入 cout<<"请输入插入的位置"; cin>>i; cout<<endl; cout<<"请输入插入元素的值:"; cin>>e; cout<<endl; try { L.Insert(i,e); } catch(char* err) { cout<<err<<endl; } break; case 3://元素删除 cout<<"请输入删除位置"; cin>>i; cout<<endl; try { e = L.Delete(i); cout<<"被删除元素为:"<<e<<endl; } catch(char* err) { cout<<err<<endl; } cin.get(pause); system("pause"); break; case 4://返回第i个元素值 cout<<"请输入要查询的元素位置:"; cin>>i; try { e = L.GetElem(i); cout<<"第"<<i<<"个元素值为:"<<e<<endl; } catch(char* err) { cout<<err<<endl; } cin.get(pause); system("pause"); break; case 5://按值进行元素查询 cout<<"请输入要查询的元素值:"; cin>>e; i = L.Locate(e); cout<<"查询元素"<<e<<"在表中的位置为:"<<i<<endl; cin.get(pause); system("pause"); break; case 6://清空表 L.Clear(); cout<<"表以清空"<<endl; cin.get(pause); system("pause"); break; case 7://测表空 i = L.Empty(); if(i) { cout<<"表空"<<endl; } else { cout<<"表不空"<<endl; } cin.get(pause); system("pause"); break; case 8://测表满 i = L.Full(); if(i) { cout<<"表满"<<endl; } else { cout<<"表未满"<<endl; } cin.get(pause); system("pause"); break; case 9://测表长 i = L.Length(); cout<<"表长为:"<<endl; cin.get(pause); system("pause"); break; case 10://遍历输出表 L.ListDisp(); cout<<endl; cin.get(pause); system("pause"); break; case 11://退出 break; default://非法选择 cout<<"Invalid choice"; break; } }while(choice != 11); return 0; }// end of main function