zoukankan      html  css  js  c++  java
  • 顺序表

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

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


    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 }
  • 相关阅读:
    122. Best Time to Buy and Sell Stock II
    121. Best Time to Buy and Sell Stock
    72. Edit Distance
    583. Delete Operation for Two Strings
    582. Kill Process
    indexDB基本用法
    浏览器的渲染原理
    js实现txt/excel文件下载
    git 常用命令
    nginx进入 配置目录时
  • 原文地址:https://www.cnblogs.com/liugangjiayou/p/11845746.html
Copyright © 2011-2022 走看看