1.1 顺序表

顺序表,全名顺序存储结构,是线性表的一种。顺序表存储数据时,会提前申请一整块足够大小的物理空间,然后将数据依次存储起来,存储时做到数据元素之间不留一丝缝隙。

顺序表的创建及增删改查等基本操作

#include "stdafx.h"

#define SIZE 5

// 顺序表
typedef struct Table {
    int * head; //声明了一个名为head的长度不确定的数组,也叫“动态数组”
    int length; //记录当前顺序表的长度
    int size;   //记录顺序表分配的存储容量
}table;

// 初始化顺序表
table initTable() {
    table t;
    t.head = (int*)malloc(SIZE * sizeof(int));
    if (!t.head) {
        printf("failed to initialize\n");
        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");
}

//插入函数,其中,elem为插入的元素,add为插入到顺序表的位置
table insert(table t, int elem, int position) {
    if (position > t.length + 1 || position < 1) {
        printf("invalid position\n");
        return t;
    }
    if (t.length == t.size) {
        t.head = (int *)realloc(t.head, (t.size + 1) * sizeof(int));
        if (!t.head) {
            printf("failed to allocate\n");
            return t;
        }
        t.size += 1;
    }

    //插入操作,需要将从插入位置开始的后续元素,逐个后移
    for (int i = t.length - 1; i >= position - 1; i--) {
        t.head[i + 1] = t.head[i];
    }
    t.length += 1;
    t.head[position - 1] = elem;
    
    return t;

}

table delTable(table t, int position) {
    if (position > t.length || position < 1) {
        printf("invalid position\n");
        return t;
    }
    for (int i = position - 1; i < t.length - 1; i++) {
        t.head[i] = t.head[i + 1];
    }
    t.length -= 1;
    return t;
}

//查找函数,其中,elem表示要查找的数据元素的值
int select(table t, int elem) {
    for (int i = 0; i < t.length; i++) {
        if (t.head[i] == elem) {
            return i+1;
        }
    }
    return -1;
}

//更改函数,其中,elem为要更改的元素,newElem为新的数据元素
table update(table t, int elem, int newElem) {
    int position = select(t, elem);
    t.head[position - 1] = newElem;
    return t;
}

int main()
{
    table t = initTable();
    for (int i = 0; i < t.size; i++) {
        t.head[i] = i + 1;
        t.length++;
    }
    printf("顺序表中的元素:\n");
    displayTable(t);

    t = insert(t, 3, 3);
    printf("\n在3位置插入元素3后:\n");
    displayTable(t);

    t = delTable(t, 3);
    printf("\n删除3位置元素后:\n");
    displayTable(t);

    printf("\n查找元素3在位置:%d\n", select(t, 3));

    t = update(t, 3, 10);
    printf("\n将元素3修改为10:\n");
    displayTable(t);
    return 0;
}

你可能感兴趣的:(1.1 顺序表)