SeqList.h
#pragma once #includeusing namespace std; const int MaxSize = 100; template class SeqList { public: SeqList();//建立空的顺序表 SeqList(DataType a[], int n);//建立长度为n的顺序表 ~SeqList();//析构函数 int Length();//求线性表的长度 DataType Get(int i);//按位查找,查找第i位元素的值 int Locate(DataType x);//按值查找,查找值为x的元素序号 void Insert(int i, DataType x);//插入操作,在第i个位置插入值为x的元素 DataType Delete(int i);//删除操作,删除第i个位置的元素 int Empty();//判断顺序表是否为空 void PrintList();//遍历操作,按序号依次输出各元素 private: DataType data[MaxSize];//存放元素的数组 int length;//顺序表的长度 }; template SeqList ::SeqList()//建立空的顺序表 { length = 0; } template SeqList ::SeqList(DataType a[], int n)//建立长度为n的顺序表 { if (n > MaxSize)throw("参数违法"); for (int i = 0; i < n; i++) data[i] = a[i]; length = n; } template SeqList ::~SeqList() {//析构函数 } template int SeqList ::Empty() // 判断顺序表是否为空 { if (length) return true; else return false; } template int SeqList ::Length()//求线性表的长度 { return length; } template void SeqList ::PrintList() { for (int i = 0; i < length; i++) cout << data[i] << 't';//依次输出线性表的元素值 cout << endl; } template DataType SeqList ::Get(int i)//按位查找,查找第i位元素的值 { if (i<1 || i>length)throw "查找位置非法"; else return data[i - 1]; } template int SeqList ::Locate(DataType x)//按值查找,查找值为x的元素序号 { for (int i = 0; i < length; i++) if (data[i] == x) return i + 1;//返回其序号i+1 return 0;//推出循环,说明查找失败 } template void SeqList ::Insert(int i, DataType x)//插入操作,在第i个位置插入值为x的元素 { if (length == MaxSize)throw"上溢出"; if (i<1 || i>length + 1)throw"插入位置错误"; for (int j = length; j >= i; j--) data[j] = data[j - 1]; data[i - 1] = x; length++; } template DataType SeqList ::Delete(int i)//删除操作,删除第i个位置的元素 { DataType x; if (length == 0)throw"下溢"; if (i<1 || i>length)throw"删除位置错误"; x = data[i - 1];//取出i位置的元素 for (int j = i; j < length; j++) data[j - 1] = data[j];//此处j 已经是元素所在的数组下标 length--; return x; }
main.cpp
#include暑期编程PK赛 得CSDN机械键盘等精美礼品!#include "SeqList.h" using namespace std; int main() { int r[5] = {1,2,3,4,5},i,x; SeqList L( r,5 );//建立具有5个元素的顺序表 cout << "当前顺序表的数据为:"; L.PrintList(); try { L.Insert(2, 8); cout << "输出插入后的数据为:"; L.PrintList(); } catch (char* str) { cout << str << endl; } cout << "当前线性表的长度为:" << L.Length() << endl; cout << "请输入要查找的元素值:" << endl; cin >> x; i = L.Locate(x); if (0 == i)cout << "查找失败" << endl; else cout << "元素" << x << "的位置为:" << i << endl; try { cout << "请输入查找第几个元素值:"; cin >> i; cout << "第" << i << "个元素值是" << L.Get(i) << endl; } catch (char* str) { cout << str << endl; } try { cout << "请输入要删除第几个元素:"; cin >> i; x = L.Delete(i); cout << "删除的元素是:" << x << ",删除后数据为:"; L.PrintList(); } catch (char* str) { cout << str << endl; } return 0; }



