#include <iostream> #include<windows.h>//exit 头文件 using namespace std; #define LIST_INIT_SIZE 100//线性表存储空间的初始分配量 class SqList{ private: int *elem;//存储空间基址 (可以不一定是int int length;//顺序表长度 int listsize;//顺序表最大长度 public: SqList(); ~SqList(); void CreatList(int a[],int);//由a数组中的元素建造顺序表 void DispList(); int getLength(); bool searchLocal(int i,int &e);//查找第i个位置的元素值 int searchElem(int e); bool ListInsert(int i,int e); bool ListDelete(int i,int&e);// 用e返回元素值 void ReverseList(SqList &L);//翻转顺序表 void emptyList();//置空表 }; SqList::SqList(){ elem = new int[LIST_INIT_SIZE]; if(!elem) exit(-1);//在一些编译器中new分配空间失败会直接报错,无返回值,此判断无意义 listsize = LIST_INIT_SIZE; length = 0; } SqList::~SqList(){ } //由a数组中的元素建造顺序表(时间复杂度O(n)) void SqList::CreatList(int a[],int n){ length = n; for(int i=0; i<n; i++) elem[i] = a[i]; } //输出顺序表L中所有元素(时间复杂度O(n)) void SqList::DispList(){ for(int i=0; i<length; i++) cout << elem[i] << " "; cout << endl; } int SqList::getLength(){ return length; } //查找第i个位置的元素值(时间复杂度O(1)) 用e来存放元素值 而返回值用来判断查找是否合理 bool SqList::searchLocal(int i,int &e){ //!引用 if(i<1 || i>length) return false; e = elem[i-1]; return true; } //查找元素所在位置(时间复杂度O(n)) int SqList::searchElem(int e){ int i; for(i=0;i<length;i++) if(elem[i]==e){ return i+1; break;//找到第一个位置就行 } return 0;//表示没找到 } //顺序表的插入(移动元素数n-i+1)(时间复杂度O(n)) bool SqList::ListInsert(int i,int e){ int k; if(i<1 || i>length+1) return false;//插入位置不正确 for(k=length-1;k>=i;k--) elem[k+1] = elem[k]; elem[i-1]=e; length++; return true; } //顺序表的删除(时间复杂度O(n)) bool SqList::ListDelete(int i,int&e){ if(i<1 || i>length) return false; int k; e = elem[i-1];//保存删除元素 for(k=i-1;k<length-1;k++) elem[k]=elem[k+1]; length--; return true; } //翻转顺序表 void SqList::ReverseList(SqList &L){ int temp; for(int i=0;i<length/2;i++){ int temp = elem[i]; elem[i] = elem[length-i-1]; elem[length-i-1] = temp; } } void SqList::emptyList(){ length=0; } int main(){ SqList list1; int arr[3] = {3,4,5}; list1.CreatList(arr,3);//建表 list1.DispList();//输出表 cout << "list1 length is " << list1.getLength() << endl; // 求第二个位置的元素 int e; list1.searchLocal(2, e); cout <<"The 2 local is elem " << e << endl; // 查找元素5的位置 cout << "The elem 5 local is " << list1.searchElem(5) << endl; // 在位置4插入元素6 list1.ListInsert(4, 6); list1.DispList(); // 在位置1删除数据元素 int a; list1.ListDelete(1,a); list1.DispList(); list1.ReverseList(list1); list1.DispList(); return 0; }
[记录] 数据结构----顺序表的实现
猜你喜欢
转载自blog.csdn.net/uttues_l/article/details/80067058
今日推荐
周排行