什么是线性表


线性表的插入元素


线性表的删除元素


线性表顺序存储的缺点

线性表的特点

1.线性表的实例

首先我们创建3个文件,分别如下:
liner_data
–sqlist.c
–sqlist.h
–test.c

sqlist.h// .h文件中定位数据的结构以及函数的方法typedef int data_t;#define N 128  //定义一个宏typedef struct {    data_t data[N];    int last;} sqlist, *sqlink;sqlink list_create();int list_clear(sqlink L);int list_delete(sqlink L);int list_empty(sqlink L);int list_length(sqlink L);int list_locate(sqlink L, data_t value);int list_insert(sqlink L, data_t value, int pos);int list_show(sqlink L);

下面编写sqlist.c文件:函数实现的功能

//// Created by Lenovo on 2023/9/9.//#include #include #include #include "sqlist.h"sqlink list_create(){    // malloc    sqlink L;    L = (sqlink)malloc(sizeof(sqlist));    if(L == NULL){        printf("list malloc failed\n");        return L;    }    // initialize    memset(L, 0, sizeof(sqlist)); // 向数组中除了最后一个,其他全部初始化为0    L->last = -1;    return L;}int list_clear(sqlink L){    /*     * @return: 0-success   -1-failed     */    if(L == NULL){        return -1;    }    memset(L, 0, sizeof(sqlist));    L->last = -1;    return 0;}int list_delete(sqlink L){    if(L==NULL)        return -1;    free(L);  // 删除堆内存    L=NULL;    return 0;}/* * list_empty: Is list empty? * para L: list * @return: 1-empty   0-not empty */int list_empty(sqlink L){    if(L->last == -1)        return 1;    else        return 0;}int list_length(sqlink L){    if(L==NULL)        return -1;    return (L->last+1);}int list_locate(sqlink L, data_t value){    return 0;}int list_insert(sqlink L, data_t value, int pos){    int i;    // 判断是否满了full?    if(L->last == N-1){        printf("list is full\n");        return -1;    }    // check para    0<=pos<=last+1     [0, last+1]    if(posL->last+1){        printf("Pos is invalid\n");        return -1;    }    //move    for (i=L->last; i>=pos; i--){        L->data[i+1] = L->data[i];    }    // update value last    L->data[pos] = value;    L->last++;    return 0;}int list_show(sqlink L){    int i;    if (L==NULL)        return -1;    if(L->last == -1)        printf("list is empty\n");    for(i=0; ilast; i++){        printf("%d ", L->data[i]);    }    puts(""); // 自动换行    return 0;}

test.c文件:main函数的执行入口

//// Created by Lenovo on 2023/9/9.//#include #include "sqlist.h"void test_insert(){    sqlink L;    L=list_create();    if (L==NULL)        return;    list_insert(L, 10, 0);    list_insert(L, 20, 0);    list_insert(L, 30, 0);    list_insert(L, 40, 0);    list_insert(L, 50, 0);    list_show(L);    list_insert(L, 100, -1000);    list_show(L);    list_delete(L);}int main(){    test_insert();    return 0;}

2.执行步骤2.1 使用gcc进行编译

c语言程序编译的过程如下:

预编译-编译-汇编-连接
汇编:gcc -c sqlist.c -o sqlist.o
gcc -c test.c -o test.o
连接:可执行文件:gcc sqlist.o test.o -o test

以上3步可直接等价于:gcc *.c -o test
程序运行成功: