王道考研之数据结构顺序表和链表

数据结构系列

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加



1.线性表

1.1 线性表的定义和相关概念

线性表:具有相同数据的序列。线性的表
包含顺序表(数组)和链表。

概念 描述
位序 从1开始计数,用 i 表示位序。
数组下标 从0开始计数,用 index 表示数组下标,其中 index + 1 = i
表头元素 线性表的第一个元素。
表尾元素 线性表的最后一个元素。
前驱 前一个元素,即当前元素的前一个位置的元素。
后驱 后一个元素,即当前元素的后一个位置的元素。

1.2 线性表的创销 增删查改 判空表长打印

2.顺序表

2.1 顺序表定义和相关概念

顺序表:逻辑上相邻的元素,物理上也相邻。----数组结构

2.2 顺序表的静态实现

缺点是:定义后无法扩容

#define capacity 10
typedef int  myDataType
typedef struct
{
   	myDataType data[capacity];
	int size;//顺序表当前的数据长度
}SqList;

2.3 顺序表的动态实现

#define capacity 10
typedef int  myDataType
typedef struct
{
   	myDataType *data;
	int size;//顺序表当前的数据长度
	int capacity;//顺序表的容量
}SqList;

2.4 顺序表的指定位置插入和指定位置删除

2.4.1 顺序表的指定位置插入

在index位置插入数据,index(取代index位置,因此index也要挪动)和index之后的数据都需要挪动
挪动的数据的数据下标范围是[index,size-1]
如何将index位置数据挪动呢?
向后挪,为了放在覆盖,则需要从最后开始向后挪动。

在这里插入图片描述
在这里插入图片描述

#include <assert.h> // 包含assert.h以使用assert

typedef struct {
   
    int *data; // 动态分配的数组
    int size;  // 顺序表的当前长度
} SqList;

// 插入元素
void ListInsert(SqList *L, int index, int e) {
   
    // 确保index在合法范围内
    assert(index >= 0 && index <= L->size);
    
    // 检查是否有足够的空间插入新元素
    if (L->size == L->capacity) {
   
        // 这里需要实现扩容逻辑,例如:
        int newCapacity = L->capacity * 2;
        int *newData = (int *)realloc(L->data, newCapacity * sizeof(int));
        if (!newData) {
   
            exit(EXIT_FAILURE); // 内存分配失败,退出程序
        }
        L
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值