#线性表的顺序存储方式
在内存中开辟一块堆内存空间,安照顺序排列数据元素。已知起始位置地址和元素的空间大小可以计算出任意元素的地址位置,具体公式为
locate(A(i-1)) = locate(A1) +(i-1)*c
A1:起始位置。
c:每个元素所需的空间大小。
优点:1、线性表不需要为逻辑关系增加额外的地址空间
2、线性表方便获取数据元素
缺点:1、插入、删除需要移动大量数据元素
2、线性表的长度太长难以确定容量
3、会造成空间碎片
下面是把线性表作为一个类
#include<iostream>
#include<cstring>
#define TYPE int
#define Max 40
using namespace std;
class Slist
{
TYPE *date;
int len;
这里设定数据最大空间为40,选定了线性表的长度和起始空间
public:
Slist(void)
{
date = new TYPE[Max];
len = 0;
}
//添加元素
bool add_head(TYPE dat)
{
if(len >= Max) return false;
date[len++] = dat;
return true;
}
//表满
bool full(void)
{
if(len == Max) return true;
return false;
}
//表空
bool empty(void)
{
if(len == 0) return true;
return false;
}
//插入
bool add_index(TYPE dat,int index)
{
if(full()) return false;
if(index<=0 || index>len) return false;
for(int i =len;i>index-2;i--)
{
date[i+1] = date[i];
}
date[index-1] = dat;
len++;
return true;
}
//删除
bool del_index(int index)
{
if(empty()) return false;
if(index<=0 || index>len) return false;
for(int i = index-1;i<len;i++)
{
date[i] = date[i+1];
}
len--;
return true;
}
//查找
int Locate_list(TYPE dat)
{
if(empty()) return false;
for(int i =0;i<len;i++)
{
if(dat == date[i])
{
return i+1;
}
}
return false;
}
//获取指定位置元素
TYPE Get_index_list(int index)
{
if(empty()) return false;
if(index<=0 || index>len) return false;
return date[index-1];
}
//遍历
void show(void)
{
for(int i =0;i<len;i++)
{
cout<< date[i]<<" ";
}
cout<<endl;
}
~Slist(void)
{
delete[] date;
}
这是具体的代码实现线性表的创建、插入、删除、获取元素、判断表空、表满。