顺序表初始化


1. 顺序表

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

使用顺序表存储集合 {1,2,3,4,5},数据最终的存储状态如图所示:
在这里插入图片描述


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<stdio.h>
#include<stdlib.h>

#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 语言中,顺序表初始化通常涉及到动态内存分配以及数组的创建。以下是基本步骤: 1. **包含头文件**:首先需要#include <stdlib.h>,这个头文件包含了函数如 malloc 和 free,用于动态内存管理。 2. **定义结构体**:如果要存储自定义数据,需要定义一个结构体(struct),比如 `typedef struct ListElement` 或者直接定义 `ListElement`。 3. **动态内存分配**:使用 `malloc()` 函数为列表分配足够的内存空间,例如 `size_t listSize = sizeof(ListElement) * n;` 其中 `n` 是所需的元素个数。 4. **初始化数组**:通过指针指向新分配的空间并初始化每个元素,如 `ListElement* nodeList = (ListElement*)malloc(listSize);` 5. **填充数据**:循环遍历数组,并对每个元素设置初始值,例如 `for (int i = 0; i < n; i++) { nodeList[i].data = initial_value; }` 6. **处理结束**:记得在程序结束前释放内存,使用 `free(nodeList)` 来防止内存泄漏。 ```c #include <stdio.h> #include <stdlib.h> typedef struct ListElement { int data; struct ListElement* next; // 如果有链表,还需要next指针 } ListElement; // 初始化一个大小为n的顺序表 void initSequentialList(int n, ListElement** nodeList) { *nodeList = (ListElement*)malloc(n * sizeof(ListElement)); for (int i = 0; i < n; i++) { (*nodeList)[i].data = 0; // 设置初始值 (*nodeList)[i].next = NULL; // 链表的话设置成NULL } } // 使用示例 int main() { int n = 5; ListElement* list = NULL; initSequentialList(n, &list); // ...后续操作... free(list); return 0; } ```
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值