数据结构小结——顺序表(指针版)
来源:互联网 发布:伴奏制作软件 编辑:程序博客网 时间:2024/06/04 20:05
上一篇介绍的是基于柔性数组存储数据的顺序表,我个人感觉它和我这篇要介绍的基于给指针开辟空间存数据的顺序表差不多,都是使用堆内存,并且能够对数据存储空间调整大小。不过个人感觉用指针的写法能方便点。
假设存储的数据类型位int型,则线性表的顺序存储类型可以用结构体表示为:
typedef int SeqData;typedef struct _seqList{ SeqData *list; int max_len; int len;}SeqList;
这种数据是由给指针开辟空间来存储数据,占用的是堆内存,理论上只要机器的内存足够大,堆内存就足够大,所以这种顺序表不存在表满的情况。
顺序表具体怎么操作呢,其实很简单。下面将简单介绍,代码均只有片段。需要完整代码请直接下载(免积分)
首先要创建一个顺序表,即给表开辟空间:
SeqList *Create_List(){ // 创建一个顺序表 SeqList* s = (SeqList*)malloc(sizeof(SeqList)/sizeof(char)); if (s == NULL) { return NULL; } // 初始化顺序的成员 // 为顺序表分配存储空间 s->list=(SeqData*)malloc(sizeof(SeqData)/sizeof(char)*INIT_SIZE); if (s->list == NULL) { free(s); // 创建存储空间失败,先释放顺序表结点 return NULL; } s->max_len = INIT_SIZE; s->len = 0; return s;}
虽然没有表满的情况,但是储存空间会满,这时候需要增加内存空间:
int AgainMalloc(SeqList *s){ if (s == NULL) return FALSE; // 新申请空间的字节数 int new_size = sizeof(SeqData)/sizeof(char)*(INIT_SIZE + INCRESS_SIZE); SeqData* tmp = (SeqData*)realloc(s->list, new_size); if (tmp == NULL) { return FALSE; } s->list = tmp; s->max_len += INCRESS_SIZE; return TRUE;}
以一段尾插法为例,看看再分配空间的用法:
int Insert_Last(SeqList *s, SeqData data){ if (s == NULL) { return FALSE; } // 检测顺序表是否存满 if (s->len == s->max_len) { // 扩展空间 if (AgainMalloc(s) != TRUE) { return FALSE; } } // 插入数据 s->list[s->len] = data; s->len++; return TRUE;}
看起来简单吧,没错,其实就是很简单。
阅读全文
0 0
- 数据结构小结——顺序表(指针版)
- 数据结构小结——顺序表(数组版)
- 数据结构小结——顺序表(柔性数组版 下)
- 数据结构小结——顺序栈
- 数据结构小结——顺序队列
- 数据结构(寒假小结)——2.1线性表之顺序表
- 数据结构—顺序表
- 顺序结构小结——顺序表(柔性数组版 上)
- 数据结构——顺序表(c++)
- 数据结构——顺序表
- 数据结构——顺序表
- 数据结构——顺序表
- 数据结构——顺序表
- 数据结构——顺序表
- 数据结构——顺序表
- 数据结构——顺序表
- 数据结构——顺序表
- 数据结构——顺序表
- 腾讯秋招上机题目游戏任务标记C++实现
- 8月4日总结
- 求区间中1的个数最多的数 若有多个输出最小的
- 临界判断&来回不间断切换效果的小算法
- Vue不同场景下组件间的数据交流
- 数据结构小结——顺序表(指针版)
- 线段树区间修改+区间查询
- java日期,时间比较
- 数据交换
- SPOJ VLATTICE
- gcc 和 nasm的区别
- Java 内存区域和GC机制
- 浅谈c++智能指针
- 【Node.js-2】自定义模块以及引用、自定义模块存放路径、发布升级自定义的模块