阅读:0       作者:严长生

顺序表的创建和初始化过程详解(C语言实现)

顺序表存放数据的特点和数组这种数据类型完全吻合,因此顺序表的实现使用的是数组。需要注意的是,使用数组实现顺序表时,一定要预先申请足够大的内存空间,避免因存储空间不足,造成数据溢出,导致不必要的程序错误甚至崩溃。

在建立顺序表时,除了预先申请内存空间,还需要实时记录顺序表的长度和顺序表本身申请的内存大小,便于后期对顺序表中的数据元素进行调取。因此在建立顺序表之前,要自定义顺序表中单个结点的结构,实现代码如下:
typedef struct Table{
    int * head;//声明了一个名为head的长度不确定的数组,也叫“动态数组”
    int length;//记录当前顺序表的长度
    int size;//记录顺序表分配的存储容量
}table;


建立顺序表的过程,也就是在预先申请内存空间的同时,给变量 size 和 length 赋初值的过程,其实现代码为:

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


顺序表建立完成后,即可使用顺序表存储数据,也就是对顺序表进行初始化的过程,若使用刚建立的顺序表存储 {1,2,3,4},其完整实现代码为:

#include <stdio.h>
#include <stdlib.h>
#define Size 4
typedef struct Table{
    int * head;
    int length;
    int size;
}table;

table initTable(){
    table t;
    t.head=(int*)malloc(Size*sizeof(int));
    if (!t.head)
    {
        printf("初始化失败");
        exit(0);
    }
    t.length=0;
    t.size=Size;
    return t;
}

void displayTable(table t){
    for (int i=0;i<t.length;i++) {
        printf("%d",t.head[i]);
    }
    printf("\n");
}
int main(){
    table t1=initTable();
    for (int i=1; i<=Size; i++) {
        t1.head[i-1]=i;
        t1.length++;
    }
    printf("顺序表为:\n");
    displayTable(t1);
    return 0;
}
输出结果:
顺序表为:
1234