C数据结构-线性表之顺序表
什么是线性表
线性表的插入元素
线性表的删除元素
线性表顺序存储的缺点
线性表的特点
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 <stdio.h>
#include <stdlib.h>
#include <string.h>
#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(pos<0 || pos>L->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; i<=L->last; i++){
printf("%d ", L->data[i]);
}
puts(""); // 自动换行
return 0;
}
test.c文件:main函数的执行入口
//
// Created by Lenovo on 2023/9/9.
//
#include <stdio.h>
#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
程序运行成功: