标签:数据结构 数据结构与算法 线性表 线性表的顺序存储结构 顺序存储结构
今天总结一下数据结构中的线性表中的顺序存储结构,这是一种比较简单的结构。
首先,看一下什么是线性表。
什么是线性表?
线性表是一种简单的数据结构,数据元素之间是一对一的关系,即除了第一个和最后一个元素外其余元素都是首尾相接的。元素的个数称为线性表的长度,长度为零则表示线性表为空。
什么是线性表的循序存储结构?
线性表中的顺序存储结构就是把线性表中的元素按逻辑次序依次存放在一组地址连续的存储空间中,也把这种线性表称为顺序表。根据顺序表的特点,通常是用数组来存储元素的。
下面就看具体的实现(C++)。
定义一个顺序表的模板类,声明相应的方法。
<span style="font-family:Courier New;font-size:14px;">const int MAXSIZE = 1000; //定义顺序表的最大长度 template <class T> //定义模板类 class SeqList { public: SeqList() { length = 0; //无参构造函数 } //初始化一个含有n个元素的顺序表 SeqList(const T a[],int n); int GetLength() //获取顺序表的长度 return length; } void PrintList(); //打印出顺序表中的元素值 void Insert(int i,T x); //将元素x插入到指定的位置 T Delete(int i); //删除位置为i的元素 T Get(int i); //返回位置为i的元素的值 int Locate(T x); //查找顺序表中值为x的元素,返回其位置 private: int length; //顺序表长度 T data [MAXSIZE]; //存储数据元素的数组 };</span>有参数的构造方法的实现:一次将给定数组里的元素赋值给data数组,若元素个数超过顺序表长度,则抛出异常
<span style="font-family:Courier New;font-size:14px;">template <class T> SeqList<T>::SeqList(const T a[],int n) { if(n>MAXSIZE) throw "数组长度不能超过顺序表的最大长度"; for(int i=0;i<n;i++) { data[i] = a[i]; } length = n; }</span>遍历顺序表中的元素,比较简单,for循环,一次取出数组元素即可.
<span style="font-family:Courier New;font-size:14px;">template <class T> void SeqList<T>::PrintList() { cout<<"按顺序依次遍历顺序表中的元素"<<endl; for(int i=0;i<length;i++) { cout<<data[i]<<" "; } cout<<endl; }</span>
<span style="font-family:Courier New;font-size:14px;">template <class T> void SeqList<T>::Insert(int i,T x) { if(length>MAXSIZE) throw "长度过大"; if(i<1||i>=length+1) throw "插入位置不存在"; //从后往前遍历 将数组元素依次后移 直到等于i时 for(int j=length;j>=i;j--){ data[j] = data[j-1]; } data[i-1] =x; length++; //数组长度增1 }</span>
<span style="font-family:Courier New;font-size:14px;">template <class T> T SeqList<T>::Delete(int i) { T n = data[i-1]; //待删元素 for(int j=i;j<length;j++) { data[j-1] = data[j]; } length--; return n; }</span>
<span style="font-family:Courier New;font-size:14px;">template <class T> T SeqList<T>::Get(int i) { return data[i-1]; } template <class T> int SeqList<T>::Locate(T x) { for(int i=0;i<length;i++) { if(data[i]==x) { return i+1; } } return 0; }</span>
<span style="font-family:Courier New;font-size:14px;">int main() { int a[6]={11,21,22,43,23,14}; SeqList<int> list(a,6); list.PrintList(); list.Insert(2,5); list.PrintList(); int x = list.Delete(3); cout<<"删除元素为:"<<x<<endl; list.PrintList(); int i = list.Locate(22); cout<<"22所在的位置为:"<<i<<endl; return 0; }</span>
标签:数据结构 数据结构与算法 线性表 线性表的顺序存储结构 顺序存储结构
原文地址:http://blog.csdn.net/hsk256/article/details/45499289