• 数据结构::线性表


    线性表
    通常用一组连续地址的内存单元来存储整张表中的数据信息
    
    实现方式
    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("插入位置不对 "); 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 ", i, L.elem[i]); } return 0; }
  • 相关阅读:
    《Codeforces Round #696 (Div. 2)》
    从Java源码角度聊设计模式之工厂模式
    HashMap死循环【基于JDK1.7】情景重现与分析(带示意图)
    Java应用级别的线程中断—interrupt&isInterrupted&interrupted的区别
    Java队列学习笔记(2)---DelayQueue
    Java队列学习笔记(1)---AbstractQueue&PriorityQueue
    junit测试用例从src/test/resources下的txt文件读取多行数据并随机选择一行
    (Ant编程) Ienumerable类型、枚举器 和自定义的 linq
    如何 给select 下拉框 设定默认值
    分页sql
  • 原文地址:https://www.cnblogs.com/osbreak/p/14521157.html
Copyright © 2020-2023  润新知