顺序表是简单的一种线性结构,逻辑上相邻的数据在计算机内的存储位置也是相邻的,可以快速定位几个元素,中间不允许有空值,插入、删除时需要移动大量的元素。
顺序表三要素:
用elems记录存储位置的基地址
分配一段连续的存储空间size
用length记录实际的元素个数,即顺序表长度
优点:随机访问比较快,在大量使用遍历的情况下,相当高效
缺点:插入,删除元素比较慢
//开发工具:vs2019
//qq:1020785391
//作者:WJ
#include <iostream>
#define MAX_SIZE 100
using namespace std;
//顺序表结构体
typedef struct SqList
{
int* elems; //存储数据
int length; //长度
int size; //大小
}SqList;
//初始化
bool initList(SqList& L)
{
L.elems = new int[MAX_SIZE];
if (!L.elems) return false;
L.length = 0;
L.size = MAX_SIZE;
return true;
}
//添加元素
bool listAppend(SqList& L, int e)
{
if (L.length == MAX_SIZE) return false;
L.elems[L.length] = e;
L.length++;
return true;
}
//输出
void listPrint(SqList& L)
{
cout << "顺序表存储空间size:" << L.size
<< ",已保存元素个数length:" << L.length << endl;
for (int i = 0; i < L.length; i++)
{
cout << L.elems[i] << "\t";
}
cout << endl;
}
//插入元素
bool listInsert(SqList& L, int i, int e)
{
if (i<0 || i>L.length) return false;
if (L.length == MAX_SIZE) return false;
for (int j=L.length-1;j>i-1;j--)
{
L.elems[j + 1] = L.elems[j];
}
L.elems[i] = e;
L.length++;
return true;
}
//删除元素
bool listDelete(SqList& L, int i)
{
if (i<0 || i>=L.length) return false;
if (i == L.length-1)
{
L.length--;
return true;
}
for (int j = i; j < L.length-1; j++)
{
L.elems[j] = L.elems[j + 1];
}
L.length--;
return true;
}
//销毁顺序表
void listDestory(SqList& L)
{
if (L.elems)
{
delete L.elems;
L.elems = NULL;
}
L.length = 0;
L.size = 0;
}
int main()
{
SqList L;
initList(L);
for (int i = 0; i < 10; i++)
{
listAppend(L, i + 1);
}
listPrint(L);
listDelete(L, 1);
listPrint(L);
listDestory(L);
listPrint(L);
system("pause");
return 0;
}