• 顺序表


    选择合适的数据结构 提高算法写的代码的效率
    数据 存储和管理

    根据数据之间的关系(逻辑结构)
    集合 类型相同 但没有关联
    线性关系 每个数据唯一的前驱和后继(排队)
    树状结构 一对多 树状结构
    图 多对多 图


    A->B->C-D

    数据的存储方式(存储结构)
    顺序存储 --->数组 存放元素位置是相邻的
    链式存储 数据位置不相邻 可以通过上一个数据找到下一个数据

    顺序表 链表/双链表 栈和队列 线性表

    顺序表 数据的方式 数组 动态数组

    存放若干数据

    算法 二分查找
    如果有序那么可以有其他的查找方式
    无序 只能一个个查找


    算法 计算数据
    数据结构 存储和管理数据

     1 #include <stdio.h>
     2 #include <time.h>
     3 #include <stdlib.h>
     4 typedef struct list
     5 {
     6     int arr[100];
     7     int len;//当前存放的数组个数
     8     int size;//数组大小  如果是动态数组  就记得加上size
     9 }LIST;
    10 void init(LIST*p);//初始化 对顺序表进行操作------->传入地址  结构体指针
    11 void insertData(LIST*p,int data);//插入
    12 void deleteData(LIST*p,int data);//删除
    13 void findData(LIST*p,int data);//查找
    14 int main()
    15 {
    16     int i;
    17     LIST mylist;//准备一个顺序表
    18     init(&mylist);
    19     srand((unsigned)time(NULL));
    20     for (i=0;i<80;++i)
    21     {
    22         insertData(&mylist,rand()%200);
    23     }
    24     for (i=0;i<mylist.len;i++)
    25     {
    26         printf("%d	",mylist.arr[i]);
    27     }
    28     getchar();
    29     return 0;
    30 }
    31 void init(LIST*p)
    32 {
    33     p->len=0;
    34     p->size=100;
    35 
    36 }
    37 void insertData(LIST*p,int data)
    38 {//头插  尾插  中间插入
    39 #if 0    //尾插
    40     if (p->len==p->size)//如果插满就不能在插了
    41     {
    42         return;
    43     }
    44     p->arr[p->len]=data;
    45     p->len++;
    46 #else
    47     if (p->len==p->size)
    48     {
    49         return;
    50     }
    51     int i;
    52     i=p->len;
    53     while (i-1>=0&&p->arr[i-1]>data)
    54     {
    55         p->arr[i]=p->arr[i-1];
    56         --i;
    57     }
    58     p->arr[i]=data;
    59     p->len++;
    60 #endif
    61 }
    62 void deleteData(LIST*p,int data)
    63 {
    64     for (int i=0;i<p->len;++i)
    65     {
    66         if (p->arr[i]==data)//不止=  区间  大于100小于120
    67         {
    68             //找到要删除的元素下标
    69             for (p->arr[i]==data)
    70             {
    71                 for (int j=i;j<p->len-1;++j)
    72                 {
    73                     p->arr[j]=p->arr[j+1];
    74                 }
    75                 p->len;//删除之后 元素个数减一
    76                 break;//删除一个之后  就可以结束了
    77             }
    78         }
    79     }
    80 
    81 }
    82 void findData(LIST*p,int data)
    83 {
    84     int i;
    85     for (i=0;i<p->len;++i)//数据可能有多个
    86     {
    87         if (p->arr[i]==data)
    88         {
    89             printf("arr[%d]=%d
    ",i,p->arr[i]);//后续可以通过下标 修改 删除
    90         }
    91     }
    92 }
  • 相关阅读:
    GridView动态删除Item
    GridView动态添加View
    Unity debug mode下的watermark去除
    Espresso unit test的输入法问题
    [troubleShooting]如何安装Andorid M preview到NEXUS系列机器
    [trouble-shooting]android 无法启动X86模式虚拟机的问题解决。
    Android studio+ndk 下面的gradle配置记录
    html call android apk的方法汇总
    Android studio 运行和编译的优化
    Android Installation error: INSTALL_FAILED_UID_CHANGED的解决办法
  • 原文地址:https://www.cnblogs.com/liugangjiayou/p/11845746.html
Copyright © 2020-2023  润新知