什麼是線性表 線性表的插入元素 線性表的刪除元素 線性表順序存儲的缺點 線性表的特點 1.線性表的實例 首先我們創建3個文件,分別如下: liner_data --sqlist.c --sqlist.h --test.c sqlist.h // .h文件中定位數據的結構以及函數的方法 typedef ...
什麼是線性表
線性表的插入元素
線性表的刪除元素
線性表順序存儲的缺點
線性表的特點
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
程式運行成功: