数据结构—线性表的顺序表示与实现

来源:互联网 发布:宝宝学加减法软件 编辑:程序博客网 时间:2024/05/06 08:26

计算机内部线性表存储方式:

1、顺序存储:顺序表

2、链式存储:链表

顺序表示是指:

用一组地址连续的存储单元依次存储线性表的数据元素;

过程分析:

假设线性表的每个数据元素需要占用x个存储单元,并以所占的第一个单元的存储地址作为数据元素起始的存储位置,因为使用一组连续的存储单元,所以下一个数据元素的位置就是当前首地址向后偏移x个单元即可,所以可以这样表示  

存储位置LOC(ai+1) = LOC(ai) + x;

 所以也就意味着如果我们要操作第6个元素,而一个数据元素的长度为x,所以我们所要找的第六个元素的地址就是起始位置向后偏移L = (6-1)* x;

相关操作代码实现:

1、保存数据结构的定义:

struct Data()

{

int nums;  //数据里面的元素组成(可以定成好多个);

};

struct list()

{

Data ListData[顺序表的最大长度+1]; // 保存顺序表的数组;

int ListLen;//顺序表已存节点数; 

};

list *lis = new list();

2、初始化顺序表:

void InitList(list *l)
{
    l->ListLen = 0;
}
3、顺序表长度
int LenList(list *l)
{
    return l->ListLen;
}
4、添加节点
int AddCode(list *l, Data data)
{
    if (l->ListLen >= Max)
        return 0;
    else
        l->ListData[++l->ListLen] = data;
    return 1;
}
5、插入节点
int Insert(list *l, int n, Data data)
{
    if (l->ListLen >= Max)
        return 0;
    if (n < 1 || n > l->ListLen-1)
         return 0;
    for (int i(l->ListLen); i >= n; --i)
        l->ListData[i+1] = l->ListData[i];
    l->ListData[n] = data;
    l->ListLen++;
    return 0;
}
6、删除节点
int Delete(list *l, int n)
{
    if (n < 1 || n > l->ListLen+1)
         return 0;
    for (int i(n); i < l->ListLen; ++i)
        l->ListData[i] = l->ListData[i+1];
    l->ListLen--;
    return 0;
}
7、通过序号查找
Data *FindByNum(list *l, int n)
{
    if (n < 1 || n > l->ListLen+1)
         return 0;
    return &(l->ListData[n]);
}
8、通过关键字查找
Data *FindByKey(list *l, char *key)
{
    for (int i(0); i <= l->ListLen; ++i)
        if (Strcmp(l->ListData[i].key, key) == 0)
            return i;
    return 0;
}
8、输出顺序表
void Show(list *l)
{
    for (int i(0); i <= l->ListLen; ++i)
       printf("%d\n", l->ListData[i].nums);
    return;
}


0 0