线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。
故可以用数组来实现顺序存储结构。
用C++编写的利用数组实现简单的读取、插入和删除功能的线性表。
#include<iostream> #define MAXSIZE 20 #define OK 1 #define ERROR 0 #define TURE 1 #define FALSE 0 typedef int Status; typedef int ElemType; class SqList{ public: SqList():length(1) { for (int x=0;x<MAXSIZE;x++) data[x]=0; } ElemType data[MAXSIZE]; int length; Status ShowElem() const; Status GetElem(int i, ElemType *e) ; Status ListInsert(int i,ElemType e); Status ListDelete(int i,ElemType *e); }; Status SqList::ShowElem() const { int k; if (length==0) return ERROR; std::cout<<"当前线性表内容为:"<<std::endl; for (k=1;k<=length;k++) std::cout<<data[k-1]<<" 、 "; std::cout<<std::endl; return OK; } Status SqList::GetElem(int i,ElemType *e) { if (length==0 || i<1 || i>length) return ERROR; *e=data[i-1]; return OK; } Status SqList::ListInsert(int i,ElemType e) { int k; if (length==MAXSIZE) return ERROR; if (i<1 || i>length) return ERROR; if (i<=length) { for (k=length-1;k>=i-1;k--) data[k+1]=data[k]; } data[i-1]=e; length++; return OK; } Status SqList::ListDelete(int i,ElemType *e) { int k; if (length==0) return ERROR; if (i<1 || i>length) return ERROR; *e=data[i-1]; if (i<length) { for (k=i-1;k<=length-1;k++) data[k]=data[k+1]; } length--; return OK; }
线性表顺序存储结构的优缺点:
一、优点
1、在存、读数据时,不管是哪个位置,时间复杂度都是O(1)。
2、无须为表示表中元素之间的逻辑关系而增加额外的存储空间。
二、缺点
1、插入和删除时,需要移动大量元素,时间复杂度都是O(n)。
2、当线性表长度变化较大时,难以确定存储空间的容量。
3、造成存储空间的“碎片”。