顺序表初始化

文章目录

  • 1. 顺序表
  • 2. 顺序表的初始化


1. 顺序表

顺序表(顺序存储结构) 存储数据时,会提前申请一整块足够大小的物理空间,然后将数据依次存储到一整块连续的存储空间内,存储时做到数据元素之间不留一丝缝隙。

使用顺序表存储集合 {1,2,3,4,5},数据最终的存储状态如图所示:
顺序表初始化_第1张图片


2. 顺序表的初始化

使用顺序表存储数据之前,除了要申请足够大小的物理空间之外,为了方便后期使用表中的数据,顺序表还需要实时记录以下 2 项数据:

  • 顺序表申请的存储容量;
  • 顺序表的长度,也就是表中当前存储数据元素的个数;

因此,我们需要自定义顺序表,C 语言实现代码如下:

typedef struct List
{
    int *head;  //声明了一个名为head的长度不确定的数组,也叫“动态数组”
    int length; //记录当前顺序表的长度
    int size;   //记录顺序表分配的存储容量
}SqList;

接下来初始化顺序表,即初步建立一个顺序表。建立顺序表需要做如下工作:

  • 给 head 动态数组申请足够大小的物理空间;
  • 给 size 和 length 赋初值;

C 语言初始化顺序表(创建空表)的代码如下:

#define SIZE 5  //对SIZE进行宏定义,表示顺序表申请空间的大小
SqList InitList()
{
    SqList L;

    L.head = (int *)malloc(SIZE * sizeof(int));  //构造一个空的顺序表,动态申请存储空间
    
    if(!(L.head))   //如果申请失败,作出提示并直接退出程序
    {
        printf("初始化失败");
        exit(0);
    }

    L.size = SIZE; //空表的初始存储空间为SIZE
    L.length = 0;   //空表的长度初始化为0

    return L;
}

通过在主函数中调用 InitList 函数,就可以成功创建一个空的顺序表,然后我们可以试着向顺序表中添加一些元素再打印出来,C 语言完整代码清单如下:

#include
#include

#define SIZE 5  //对SIZE进行宏定义,表示顺序表申请空间的大小

typedef struct List
{
    int *head;  //声明了一个名为head的长度不确定的数组,也叫“动态数组”
    int length; //记录当前顺序表的长度
    int size;   //记录顺序表分配的存储容量
}SqList;

SqList InitList();
void DisplayList(SqList L);

int main()
{
    SqList L = InitList();
    //向顺序表中添加元素
    for(int i = 0; i < L.size; i++)
    {
        L.head[i] = (i+1);
        L.length++;
    }
    printf("顺序表中存储的元素分别是:\n");
    DisplayList(L);
}

SqList InitList()
{
    SqList L;

    L.head = (int *)malloc(SIZE * sizeof(int));  //构造一个空的顺序表,动态申请存储空间
    
    if(!(L.head))   //如果申请失败,作出提示并直接退出程序
    {
        printf("初始化失败");
        exit(0);
    }

    L.size = SIZE; //空表的初始存储空间为SIZE
    L.length = 0;   //空表的长度初始化为0

    return L;
}

//输出顺序表中元素的函数
void DisplayList(SqList L)
{
    for(int i = 0; i < L.length; i++)
    {
        printf("%d ", L.head[i]);
    }
    printf("\n");
}

程序运行结果如下:

顺序表中存储的元素分别是:
1 2 3 4 5

你可能感兴趣的:(数据结构与算法,c语言,数据结构,算法)