以typedef int ElemType;//typedef struct { ElemType *elem; int le ngth; int listsize;/SqList;为基础做一个顺序表
时间: 2024-10-18 21:09:52 浏览: 22
浅谈int8_t int64_t size_t ssize_t的相关问题(详解)
在这个基础结构的基础上,我们可以创建一个简单的顺序表(也称为线性表)数据结构。首先,`typedef int ElemType;` 定义了一个元素类型,假设这个元素可以是整数。
```c
// 使用typedef简化了类型声明
typedef struct SqList {
ElemType* elem; // 指向元素的指针
int length; // 列表的当前长度
int listsize; // 初始分配的列表大小
} SqList;
```
为了操作这个顺序表,我们需要提供一些基本功能,如初始化、插入、删除等:
1. 初始化函数 (`void InitList(SqList* list)`) 可以将 `list->elem` 设置为NULL,`length` 和 `listsize` 设为0:
```c
void InitList(SqList* list) {
list->elem = NULL;
list->length = 0;
list->listsize = 0;
}
```
2. 插入元素 (`void Insert(SqList* list, int index, const ElemType value)`) 需要调整指针和计数器:
```c
void Insert(SqList* list, int index, const ElemType value) {
if (index < 0 || index > list->length + 1) return;
// 如果需要扩展,检查是否达到最大容量
if (list->length == list->listsize) ExpandList(list);
// 移动元素到新位置
for (int i = list->length; i > index; i--) {
list->elem[i] = list->elem[i - 1];
}
// 插入值
list->elem[index] = value;
list->length++;
}
// 扩展列表函数(这里省略)
void ExpandList(SqList* list) {
list->listsize *= 2;
list->elem = realloc(list->elem, sizeof(ElemType) * list->listsize);
}
3. 删除元素 (`void Delete(SqList* list, int index)`):
```c
void Delete(SqList* list, int index) {
if (index < 0 || index >= list->length) return;
// 将元素移到待删除的位置
for (int i = index; i < list->length - 1; i++) {
list->elem[i] = list->elem[i + 1];
}
// 清理并减小长度
list- 1] = NULL;
list->length--;
}
```
阅读全文