制作公司网站有哪些好处,集团网站网页模板,网站首页的动态视频怎么做的,手机免费制作logo1、线性表概述
1.1线性表的定义
线性表#xff08;list#xff09;#xff1a;零个或多个数据元素的有限序列。
简单地来说#xff0c;我们可以用下面这张图来描述一个线性表#xff1a; 1.2 线性表的存储结构
1.2.1顺序存储结构——顺序表
顺序表是将数据全部存储到…1、线性表概述
1.1线性表的定义
线性表list零个或多个数据元素的有限序列。
简单地来说我们可以用下面这张图来描述一个线性表 1.2 线性表的存储结构
1.2.1顺序存储结构——顺序表
顺序表是将数据全部存储到一整块内存空间中数据元素之间按照次序挨个存放。 1.2.2链式存储结构——链表
链表不强制要求数据在内存中集中存放各个元素可以分散存放在内存中。 2、顺序表
2.1顺序表的定义 它是用一组地址连续的存储单元依次存储线性表中的数据元素从而使逻辑上相邻的两个 元素在物理位置上也相邻。 接下来我们用代码进行描述
#define LIST_MAX_NUM 100
typedef struct
{int list[LIST_MAX_NUM];int len;
}Linear_List_Type;Linear_List_Type mylist;
这段代码定义了一个结构体类型 Linear_List_Type并创建了一个该类型的变量 mylist。
代码解析 typedef struct { ... } Linear_List_Type;这行代码定义了一个结构体并使用 typedef 为该结构体起了一个别名 Linear_List_Type。这意味着在以后使用 Linear_List_Type 这个名字就代表了这个结构体类型。 int list[LIST_MAX_NUM];这是一个整数数组数组的长度是 LIST_MAX_NUM这个宏应该在其他地方定义过用来表示数组的最大长度。 int len;这是一个整数变量用来存储数组中当前有效元素的数量也就是线性表的长度。 Linear_List_Type mylist;这行代码定义了一个名为 mylist 的变量类型是 Linear_List_Type也就是前面定义的结构体类型。mylist 代表一个具体的线性表实例。
2.2顺序表的基本操作
2.2.1初始化
初始化操作的意义
该函数将传入的线性表的长度 len 设置为 0从而将线性表重置为空状态。在数据结构中初始化操作是确保线性表在使用之前处于一个已知的、正确的状态。这通常是使用线性表的第一步操作。
void InitList(Linear_List_Type* p)
{p-len 0;
}
代码解析 函数声明 void InitList(Linear_List_Type* p) void表示该函数没有返回值。InitList函数名称用于初始化线性表。Linear_List_Type* p函数的参数是一个指向 Linear_List_Type 类型的指针 p。这个指针用于指向需要初始化的线性表。 p-len 0; p-len通过指针 p 访问线性表结构体中的 len 成员。赋值运算符。0将 len 设置为 0。这一步将线性表的长度初始化为 0表示线性表为空没有有效元素。 2.2.2插入
假设线性表的存储空间为V[1:m]表长为n插入位置i插入元素b则代码如下
void InsertList(Linear_List_Type* p, int m, int i, int b)
{int k;if (p-len m){printf(overflow);return;}if (i p-len){i p-len 1;}else if (i 1){i 1;}for (k p-len; k i; k--){p-list[k] p-list[k - 1];}p-list[i - 1] b;p-len 1;
} 参数说明 线性表的指针用于操作目标线性表。参数包括线性表的最大容量、插入位置、以及要插入的元素。 判断线性表是否已满 首先检查线性表当前长度是否已达最大容量如果已满打印“overflow”提示并退出函数防止溢出错误。 调整插入位置 检查插入位置是否超出当前长度如果插入位置大于当前长度将位置调整为表的末尾。如果插入位置小于 1则将插入位置调整为第一个位置。 移动元素腾出插入空间 从线性表的最后一个元素开始逐个向后移动元素为插入新元素腾出空间。 插入新元素 将新元素插入到调整好的位置。 更新线性表长度 插入后更新线性表的长度以反映新的元素数量。
2.2.3删除
void DeleteList(Linear_List_Type* p, int i)
{int k;if (p-len 0){printf(underflow);return;}if (i1 || ip-len){printf(this element is not in the list);return;}for (k i; k p-len; k){p-list[k - 1] p-list[k];}p-len - 1;return;
}
步骤解析 函数定义与参数说明 Linear_List_Type* p指向线性表的指针操作的目标是这个线性表。int i表示要删除的元素的位置从 1 开始计数。 检查线性表是否为空 if (p-len 0)判断线性表是否为空即当前长度是否为 0。如果线性表为空则打印 underflow 提示表示删除操作无法进行并立即返回。 检查删除位置是否有效 if (i 1 || i p-len)判断插入位置是否超出有效范围。 如果 i 小于 1 或大于当前线性表的长度说明删除位置无效。打印 this element is not in the list 提示并退出函数。 移动元素填补空位 for (k i; k p-len; k)从删除位置 i 开始将其后的元素依次向前移动。p-list[k - 1] p-list[k];将第 k 位置的元素移动到 k-1 位置逐步覆盖被删除的元素位置。 更新线性表的长度 p-len - 1;删除元素后线性表的长度减少 1。 函数返回 return;结束函数返回到调用者。
总结