using namespace std;
/*定义线性表的容量*/
/*定义线性表元素类型*/
typedef int Element;
/*定义线性表的结构体*/
typedef struct{
Element data[MAXSIZE]; /*线性表使用一维数组做为顺序存储*/
int size = 0; /*表示当前线性表的长度*/
}List;
/**
* 获取线性表的长度
*/
int getSize(List l){
return l.size;
}
/**
* 按索引位置进行元素插入
*/
void insertByIndex(List *l,int index,Element e){
if (l->size >= MAXSIZE){
cout << "insert data to list failed,because: list size("<< l->size<<") lt MAIXSIZE("<< MAXSIZE <<")" <<endl;
return;
}
if (index < 0 || index > l->size){
cout << "insert data to list failed,because:index < 0 || index > l->size" << endl;
return;
}
if (index <= l->size){
for(int i = l->size-1; i > index-1;i--){
l->data[i+1] = l->data[i];
}
}
l->data[index] = e;
l->size++;
}
/**
* 按索引位置删除元素
*/
void deleteByIndex(List *l,int index,Element *e){
if (index < 0 || index > l->size){
cout << "index out" << endl;
return;
}
*e = l->data[index];
for(int i=index; i < l->size; i++){
l->data[i] = l->data[i+1];
}
l->size--;
return;
}
/*
* 获取线表中指定位置的元素
* */
void getElement(List l,int index,Element *e){
if(index < 0 || index >= l.size){
cout << "索引超出范围" << endl;
return;
}
*e = l.data[index];
}
/**
* 在线性表尾部追加元素
*/
void append(List *l,Element e){
cout << "size: " << l->size << endl;
if (l->size >= MAXSIZE){
cout << "list is full,storage size: " << MAXSIZE << endl;
return;
}
l->data[l->size] = e;
l->size++;
}
/**
* 打印输出线性表中的元素
*/
void printElement(List l){
for (int i =0; i < l.size; i++){
cout << "index: " << i <<" value: " << l.data[i] << endl;
}
}
/*
* 线性表的顺序存储结构,指的是用一段连续的存储单元依次存储线性瑶数据元素
* 存储器中每个存储单元都有自己的编号,这个编号称为地址。
* 有点: 1.无需为表示元素之间逻辑而增加额外的存储空间
* 2.可以快速读取表中的任何一个位置的元素
* 缺点: 1.插入和删除需要移动大量的元素
* 2.当线性表长度变化较大时,难以确定存储空间的容量
* 3.造成存储空间的"碎片"
*/
int main(){
List l;
cout << "size: " << getSize(l) << endl;
for(int i = 0; i < 20; i++){
insertByIndex(&l,i,(i+1)*2);
}
cout << "size: " << getSize(l) << endl;
insertByIndex(&l,1,30);
cout << "size: " << getSize(l) << endl;
Element value;
deleteByIndex(&l,1,&value); //the 2th element
cout << "size: " << getSize(l) <<" value: " << value << endl;
append(&l,100);
append(&l,200); //返回错误,线性表的存储空间已满无法追加新的元素到列表尾部
cout << "size: " << getSize(l) << endl;
cout << endl;
Element e;
getElement(l,19,&e);
cout << "get elment value is: " << e << endl;
cout << endl << "=========================" << endl;
printElement(l);
return 0;
}
线性表-顺序存储实现
原创
©著作权归作者所有:来自51CTO博客作者小白菜c加加的原创作品,请联系作者获取转载授权,否则将追究法律责任
下一篇:通过SDK获取腾讯云审计操作记录
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
1.链式存储的线性表——C语言实现
本文是作者学习数据结构过程中在单链表基本运算代码实现时遇到问题并解决问题后的结果
单链表 基本运算 存储结构 代码实现 -
【数据结构】详细剖析线性表
【数据结构】第二章——线性表(9)总结了线性表的基本知识点,并对循序表与链表进行了比较
数据结构 C语言 线性表 顺序表 链表 -
线性表的顺序存储实现
SeqList.h头文件 SeqList.c
数据结构 编程开发 -
线性表(1):线性表顺序存储结构的php实现
线性表的顺序存储结构 (sequential list),也叫顺序表的php实现
php 数据结构 线性表 顺序表 -
线性表的顺序存储——顺序表
之前我们讲了线性表, 本篇来阐述下线性表的顺序存储——顺序表定义线性表的顺序存储又称为顺序表, 它
数据结构 算法 顺序表 数据 sql -
线性表的顺序存储
性表是否合法判断删除位置是否合法将元素取出
c++ 算法 数据结构 List 线性表 -
顺序线性表的实现
顺序表的创建
sql 删除元素 i++ -
线性表(二)——顺序存储结构
一、介绍了线性表的顺序存储结构的构造原理;二、介绍了基于顺序存储结构的线性表
线性表 顺序存储结构 查找 插入 删除