线性表的基本操作(InitList&DestroyList)
1、InitList(&L)
功能:初始化表,构造一个空的线性表L,分配空间
#define _CRT_SECURE_NO_WARNINGS
// InitList(&L):初始化表,构造一个空的线性表L,分配空间
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define INIT_CAPACITY 10 //初始化线性表的容量
// 线性表结构体定义(顺序表)
typedef struct {
int* data; //存储元素的动态数组指针
int length; // 当前表长(已存储元素数量)
int capacity; //线性表总容量(最大存储能力)
} LinearList;
// 初始化线性表;构造空表并分配空间
bool InitList(LinearList* L)
{
//分配初始容量的内存空间
L->data = (int*)malloc(INIT_CAPACITY * sizeof(int));
if (L->data == NULL)
{
return false;
}
L->length = 0;
L->capacity = INIT_CAPACITY;
return true;
}
int main()
{
LinearList L; // 声明线性表变量
// 调用初始化函数
if (InitList(&L))
{
printf("线性表初始化成功!\n");
printf("分配容量: %d\n", L.capacity);
printf("当前表长: %d\n", L.length);
printf("数据存储地址: %p\n", L.data);
}
else
{
printf("初始化失败!内存分配错误。\n");
}
//释放分配内存空间
free(L.data);
return 0;
}
运行结果:
2、DestroyList(&L)
销毁操作。销毁线性表,并释放线性表L所占用的内存空间
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define INIT_CAP 10 //初始化容量
// 顺序表定义
typedef struct {
int* data; // 存储数据的动态数组
int len; // 当前长度(元素个数)
int cap; // 总容量
} SeqList;
// 初始化顺序(构成空表)
bool InitList(SeqList* L)
{
L->data = (int*)malloc(INIT_CAP * sizeof(int));
if (L->data == NULL)
{
return false;
}
L->len = 0;
L->cap = INIT_CAP;
return true;
}
// 销毁顺序表(释放空间)
void DestroyList(SeqList* L)
{
free(L->data);
L->data = NULL; //防止野指针
L->len = 0; // 重置长度
L->cap = 0; // 重置容量
}
int main()
{
SeqList list;
// 初始化测试
if (InitList(&list))
{
printf("初始化成功!\n");
printf("容量:%d,当前长度:%d,数据地址:%p\n", list.cap,list.len,list.data);
}
else {
printf("初始化失败(内存不足)\n");
return 1;
}
// 销毁测试
DestroyList(&list);
printf("\n销毁后状态:\n");
printf("容量:%d,当前长度:%d,数据地址:%p\n", list.cap, list.len, list.data);
return 0;
}
运行结果:
注意点:
// 错误检查机制
if (!L->data) return false;
//以上写法等价于以下
if (L->data == NULL) return false; // 显式比较NULL
- 野指针:在 C 语言中,”野指针”(Dangling Pointer)是指向已被释放内存的指针。如果后续代码继续使用这个指针,会导致未定义行为(如程序崩溃、数据损坏)。
本网站原创文章版权归何大锤的狂飙日记所有。发布者:何大锤,转转请注明出处:何大锤的博客