用C语言实现线性表

#include <stdio.h>
#include <malloc.h>
#define bool int
#define True 1
#define False 0
#define ERROR -1
#define SIZE 100
/*
    1、初始化线性表
    2、删除线性表
    3、判定是否为空表
    4、线性表长度
    5、输出线性表全部元素
    6、按元素位置查找
    7、按元素值查找
    8、插入
    9、删除
    10、在末尾添加值
    11、删除末位置
*/
typedef struct {
    int data[SIZE];
    int length;
} seq_list;

// 初始化
void init_list(seq_list* list)
{
    // 分配存储线性表的空间
    list->data = (seq_list*)malloc(sizeof(seq_list));
    list->length = 0;
}

// 销毁线性表
void destroy_list(seq_list* list)
{
    free(list);
}

// 判断是否为空表
bool list_empty(seq_list* list)
{
    // 是空表返回 1, 不是0
    return (list->length == 0);
}

// 线性表长度
int list_length(seq_list* list)
{
    return (list->length);
}

// 输出线性表
void disp_list(seq_list* list)
{
    int i;
    for (i=0; i<length; i++){
        printf("%d", list->data[i]);
    }
    printf("
");
}

// key 位置元素
int get_elem(seq_list* list, int key)
{
    int value = ERROR;
    if (-1 < key && key < list->length){
        n = list->data[key];
    }
    return n;
}

// 按值查找, 返回位置
int locate_elem(seq_list* list, int value)
{
    int key = -1;
    int i;
    for (i=0; i<list->length; i++){
        if (list->data[i] == value){
            key = i;
            break;
        }
    }
    return key;
}

// 插入 value 到 key 位置
bool list_insert(seq_list* list, int value, int key)
{
    bool n = False;
    int i;
    // 表未满, 位置合法, 才可插入
    if ((list->length < SIZE) && (-1 < key && key < list->length)){
        for (i=list->length; i != key; i--){
            list->data[i+1] = list->data[i]
        }
        list->data[key] = value;
        n = True;
        list->length++;
    }
    
    return n;
}

// 删除 key 位置元素
bool list_delete(seq_list* list, int key){
    int i;
    bool n = False;
    if (-1 < key && key < list->length){
        for (i=key; i<list->length-1; i++){
            list->data[i] = list->data[i+1];
        }
        list->length--;
    }
    
    return n;
}

// 追加元素
bool list_append(seq_list* list, int value)
{
    bool n = Flase;
    // 表未满, 就可以追加
    if (list->length < SIZE){
        list->data[list->length] = value;
        list->length++;
        n = True;
    }
    
    return n;
}

// 删除末尾元素
bool list_pop(seq_list* list)
{
    bool n = Flase;
    if (list->length != 0){
        list->length--;
    }
}

 

你可能感兴趣的