【数据结构】关于数据结构顺序表动态内存开辟的介绍
来源:互联网 发布:c语言指针初始化 编辑:程序博客网 时间:2024/06/10 18:11
数据结构中,线性表的顺序存储结构就是,把线性表中的所有元素按照其逻辑顺序依次存储在计算机存储器中指定存储位置开始的一块连续的存储空间中。
因此,线性表的顺序存储结构是利用数组来实现的,数组的基本类型就是线性表中元素的类型。
顺序表的实现可以是静态的也可以是动态的,不过静态比较浪费内存,所以采用动态内存分配来实现顺序表。
maloc函数:
void *malloc(int size);
说明:malloc 向系统申请分配指定size个字节的内存空间。返回类型是 void* 类型。
realloc函数
使用例子如下:
char* p = malloc(1024);
char* q = realloc(p,2048);
1.如果 当前连续内存块足够 realloc 的话,只是将p所指向的空间扩大,并返回p的指针地址。 这个时候 q 和 p 指向的地址是一样的。
2.如果 当前连续内存块不够长度,再找一个足够长的地方,分配一块新的内存,q,并将 p指向的内容 copy到 q,返回 q。并将p所指向的内存空间删除。
这样也就是说 realloc 有时候会产生一个新的内存地址 有的时候不会。所以在分配完成后。我们需要判断下 p 是否等于 q。并做相应的处理。
//在头文件中定义顺序表的结构体typedef struct Seqlist{ SeqType* data;//顺序表指针 size_t size;//顺序表大小 size_t capacity;//容量}Seqlist;//在对顺序表初始化的时候进行动态内存开辟void Seqlist_init(Seqlist *seq){ if (seq == NULL){ printf("seq指针为空指针"); return; } seq->capacity = LIST_SIZE_INIT;//LIST_SIZE_INIT是宏定义的一个值 seq->data = (SeqType *)malloc(seq->capacity * sizeof(SeqType)); if (seq->data != NULL){ seq->size = 0; }}//如果顺序表已满,则需要扩充void Seqlist_if_full(Seqlist* seq){ if (seq == NULL){ printf("seq指针为空指针"); return; } if (seq->size == LIST_SIZE_INIT){ SeqType* new_data = (SeqType*)realloc(seq->data, sizeof(SeqType)*seq->capacity * 2);//用realloc函数直接对开辟的空间进行扩容 if (new_data != NULL){ free(seq->data); seq->data = new_data; seq->capacity *= 2; } }}
动态顺序表,最后需要对顺序表开辟的内存空间进行销毁
void Destoryseqlist(pseqlist ps) //回收开辟的动态内存 { assert(ps); if(ps->data != NULL) { free(ps->data); ps->data = NULL;//将开辟的指针的赋为空指针,防止成为野指针被使用 } }
阅读全文
0 0
- 【数据结构】关于数据结构顺序表动态内存开辟的介绍
- 顺序表(动态开辟内存)
- 数据结构---动态顺序表
- 【数据结构】动态顺序表
- 数据结构—动态顺序表的实现
- 数据结构_动态顺序表
- C++动态内存的开辟
- 【自己动手写数据结构】 -- 容量动态增加的顺序表
- 数据结构线性表的动态顺序实现增删改查
- 数据结构2-动态生成顺序表的实例与分析
- 数据结构之顺序表的静态表示和动态表示
- C语言:动态顺序表的增删查改,数据结构
- 顺序表(静态开辟内存)
- 【数据结构】动态内存管理
- 数据结构--动态内存管理
- 数据结构--顺序表的操作
- 数据结构顺序表的实现
- 数据结构-顺序表的操作
- iOS中@try@catch@finally捕获异常使用
- 文件基本操作
- 这几个征信误区你一定要知道!否则会房贷多花几十万
- 前端JS将文字替换成伪类标签防爬虫的一个方法
- Windows下使用pthread
- 【数据结构】关于数据结构顺序表动态内存开辟的介绍
- 创建表空间方式
- Hive 实现多字段的IN 和 NOT IN
- 十大编程算法助程序员走上高手之路
- capstone训练营2017-12-13
- Spring Boot(六)——Spring Date Jpa
- PuTTY 和 Xshell 密钥认证
- 利用jQuery形成二维码
- Java---交换类排序(冒泡排序,快速排序)