数据结构 线性表

来源:互联网 发布:qq音乐网站源码 编辑:程序博客网 时间:2024/06/17 14:25

在线性表中

存在唯一的第一个元素和最后一个元素

除第一个元素外 其他元素有且仅有一个直接前驱, 第一个元素没有直接前驱

除最后一个元素外, 其他元素有且仅有一个直接后继 最后一个元素没有直接后继


线性表中元素和位置之间可以有关系 也可以没有关系

用顺序存储方式实现的线性表称为顺序表 它是用向量作为其存储结构的(即一维数组)


顺序表的静态存储结构:

extarea readonly="readonly" name="code" class="c++">#include<iostream>#include<stdlib.h>#include<algorithm>#define initSize 100  //初始大小using namespace std;typedef int dataType;class seqList {private:dataType *data; int maxSize, n;    //已有数组和最大数组public:seqList() {data = new dataType[initSize];maxSize = initSize;n = 0;}void clearList();  //清除顺序表int Length();     //获取线性表长度int isEmpty();    //判断表空否int isFull();     //判断表是否已满void add(dataType num);void explore();void insert(dataType num,int pos); //插入值void Delete(dataType num);//顺序表查找算法int Search(dataType num);     //查找void Copy(seqList& L);      //复制算法void swap(dataType &a, dataType &b) {dataType &temp = a;a = b;b = temp;}};//清空列表void seqList::clearList() {delete data;data = new dataType[initSize];n = 0;   //顺序表清空为0}//获取长度int seqList::Length() {return n;}//判断是否为空int seqList::isEmpty() {return(n == 0) ? 1 : 0;    //返回值为0吗}//判断是否为满int seqList::isFull() {return(n == maxSize) ? 1 : 0;   //返回最大值}//查找指定数字int seqList::Search(dataType num) {for (int i = 1; i <= n; ++i) {if (data[i-1] == num) return i;   //查找成功 返回值的位置}return 0;}//复制指定值void seqList::Copy(seqList& L) {      //将元素复制到指定列表if (L.data) {int size = this->n;for (int i = 0; i < size; ++i) {L.data[i] = this->data[i];}L.n = size;}}//add值void seqList::add(dataType num) {this->data[n] = num;this->n++;}//遍历void seqList::explore() {int size = this->n;for (int i = 0; i < n; ++i) {dataType obj = this->data[i];cout << obj << "  ";}cout << endl;}//插入值void seqList::insert(dataType num, int pos) {if (isFull()) {cout << "the list is full!!" << endl;return;}if (pos >= 0 && pos <= n) {      //如果position符合范围的话this->n++;int i;for (i = n; i > pos; --i) {data[i + 1] = data[i];}data[i] = num;}}//删除值void seqList::Delete(dataType num) {if (isEmpty()) {cout << "the list is Empty!" << endl;return;}if (Search(num) == 0) {return;}int pos = Search(num) - 1;for (int i = pos; i < n; ++i) {data[i] = data[i + 1];}this->n--;   //减少一位}int main() {seqList myList;seqList myList2;myList.add(10);myList.add(20);myList.add(30);myList.add(40);myList.add(50);int length = myList.Length();cout << length << endl;myList.Copy(myList2);int length_2 = myList2.Length();cout << length_2 << endl;myList.insert(999, 5);myList.Delete(1000);myList.explore();myList2.explore();system("PAUSE");return 0;}</textarea> 

线性表的缺点:每次插入和删除都要移动元素 非常消耗内存


原创粉丝点击