数据结构::线性表

 

线性表
通常用一组连续地址的内存单元来存储整张表中的数据信息

实现方式
1、静态分配空间——数组
2、动态分配空间——动态数组(mallocrealloc)

特征
1、有唯一一个表名标识该表
2、占据一块连续的内存单元
3、数据顺序存放,元素之间存在先后关系

 

线性表-顺序存储。

优点
1)逻辑相邻,物理相邻。
2)可随机存取任一元素   例:A[9]。
3)存储空间使用紧凑。

缺点
1)插入、删除操作需要移动大量的元素。
2)预先分配空间需按最大空间分配,利用不充分。
3)表容量难以扩充。
 
线性表-顺序存储(动态分配空间)
1)定义采用malloc()
2)追加采用realloc() 

 

#include <cstdio>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
//线性表(动态数组)(动态分配空间) #define MAXSIZE 3 typedef struct { int* elem; int length; int listSize; }Nodelist; /*初始化一个动态链表申请MAXSIZE 个int 类型 数据的内存空间*/ void initSqlist(Nodelist* L) { L->elem = (int*)malloc(MAXSIZE * sizeof(int)); if (L->elem == NULL)// 如果malloc申请内存失败 exit(-1); L->length = 0;// 已使用的个数 为0 L->listSize = MAXSIZE;// 申请总个数为MAXSIZE 个单位数据结构 } // 在表L中的第i个位置,插入 item void insertElem(Nodelist* L, int i, int item) { int* base, * insertptr, * p; if (i<0 || i > L->length) { printf("插入位置不对\n"); exit(0); } //所申请的内存空间全部用完,需要动态追加新的内存空间 if (L->length == L->listSize) { //增加一个空间 base = (int*)realloc(L->elem, (L->listSize + 1) * sizeof(int)); L->elem = base;//连续的空间 L->listSize++; } // 得到插入地点的地址 insertptr = &(L->elem[i]); // 当插入的位置在前length个 的某个位置的时候。 if (i < L->length) { // 从最后一个元素,依次往后挪 for (p = &(L->elem[L->length - 1]); p >= insertptr; p--) { *(p + 1) = *p; } } // 插入要插入的数 *insertptr = item; // 使用的位置数目加一 L->length++; } int main() { Nodelist L; int i = 0; initSqlist(&L); for (int i = 0; i < 5; i++) { insertElem(&L, i, i); } for (i = 0; i < 5; i++) { printf("L->elem[%d]=%d\n", i, L.elem[i]); } return 0; }

 

posted @ 2021-03-11 22:50  osbreak  阅读(68)  评论(0编辑  收藏  举报