zoukankan      html  css  js  c++  java
  • C++学习(二十九)(C语言部分)之 顺序表

    一、数据结构
    组织 存放数据的方式
    精心选择的数据结构可以提升效率
    数据结构 1、逻辑结构
    一对多关系 父与子
    一对一关系 排队中
    多对多关系 两地的路线
    2、存储结构
    数据存放的位置关系
    顺序存储数据 一个挨着一个的存储(数组)
    链式存储方式

    二、线性表
    逻辑方面是线性关系 一对一线性 每一个元素有唯一的前驱和后继
    顺序存储的线性表 就是顺序表
    链式存储的线性表 就是链表

    三、顺序表
    主要实现方式---->数组/动态数组
    顺序存储的线型表
    数据结构--->为了管理数据
    对数据进行操作--->增加 删除 查找 修改

    附:
    静态数组(定义的大小固定)
    数组已满 就不能存放数据
    动态数组
    数组满 --->分配新的内存(申请更大的空间存储数据)
    实现 用malloc申请内存

    测试代码笔记如下:

      1 #include<stdio.h>
      2 struct LIST  //定义结构体
      3 {
      4     int arr[20];  //存放数据的数组
      5     int size;  //数组中最多能够存多少元素
      6     int len;  //数组中已经存了多少元素
      7 };
      8 
      9 //初始化函数
     10 void main(struct LIST*p)
     11 {
     12     //刚开始表中没有数据
     13     p->len = 0;
     14     p->size = 20; //最多可以存的数据
     15 }
     16 
     17 //增加数据
     18 void insert(struct LIST*p,int data)
     19 {
     20     //直接插入末尾
     21     if (p->len < p->size)  //说明顺序表没有满
     22     {
     23         p->arr[p->len] = data;  //根据数组的下标判断 len知道的是最后一个元素的下一个位置
     24         p->len++;
     25         //两行等价于p->arr[p->len++]=data;
     26     }
     27 }
     28 
     29 //插入到中间 插入到前面
     30 void instert_middle(struct LIST*p, int data, int index)  //index是下标  插入到下标所在位置
     31 {
     32     if (p->len < p->size)  //说明顺序表没有满
     33     {
     34         if (index >= 0 && index < p->len)
     35         {
     36             //可以先插入到这个位置
     37             //先腾出一个位置
     38             for (int i = p->len; i>index; --i)
     39             {
     40                 p->arr[i] = p->arr[i - 1];  //元素往后移动
     41             }
     42             p->arr[index] = data; //插入到这个位置
     43             p->len++;  //插入了一个元素 所以让它加1
     44         }
     45         else
     46         {
     47             p->arr[p->len++] = data;  //否则插入尾部
     48         }
     49     }
     50 }
     51 
     52 //查找  一个一个找
     53 int  search(struct  LIST*p, int data)
     54 {
     55     for (int i = 0; i < p->len; ++i)
     56     {
     57         if (data == p->arr[i])
     58         {
     59             return i;  //找到了return下标
     60         }
     61     }
     62     return -1;  //不存在这个位置
     63 }
     64 
     65 //修改数据
     66 void change(struct LIST*p,int data,int newData)
     67 {
     68     //根据学生的名字查找
     69     for (int i = 0; i < p->len; ++i)
     70     {
     71         if (data == p->arr[i]);  //找到了就修改
     72         {
     73             p->arr[i] = newData;  //学生名字 字符数组 比较用什么 strcmp  string.h
     74             break;  //如果有多个相同数据都要修改 去掉break
     75         }
     76     }
     77 }
     78 
     79 //删除数据  删除就是覆盖 循环
     80 void dele(struct LIST*p, int data)
     81 {
     82     for (int i = 0; i < p -> len; ++i)
     83     {
     84         if (data == p->arr[i])  //找到位置 开始删除
     85         {
     86             for (int j = i; j < p->len-1; ++j)  //从前往后
     87             {
     88                 p->arr[j] = p->arr[j + 1];
     89             }
     90             p->len--;
     91             break;
     92          }
     93      }
     94 }
     95 
     96 int main()
     97 {
     98 #if 0
     99     int x, y, z;
    100     int k;
    101     printf("%p,%p,%p,%p", &x, &y, &z, &k);
    102 #endif
    103 
    104 #if 1
    105 /*
    106 示例:
    107     存放同学的信息  学号+姓名
    108 一个班级100个同学 +插班生 +转班生
    109 150--70
    110 字符数组 字符串
    111 char arr[100]="hello world";//数组大小 数组有效元素11个字符
    112   前面是有效数据 后面是无效数据  这个只限于字符数组
    113 顺序表中 1.有多少个数据 2.可以放多少个数据
    114 int brr[100]={1,2,34};
    115 //有3个数据 最多可以放100个数据
    116 
    117 默认不考虑数据重复问题
    118 */
    119     struct LIST list; //定义一个顺序表
    120     init(&list);  //调用函数初始化
    121     insert(&list, 2);
    122     instert_middle(&list, 3, 4);  //插入的数据是3  插到下标为4的位置
    123 #endif
    124     getchar();
    125     return 0;
    126 }

    2019-03-30  09:17:07

  • 相关阅读:
    requestAnimationFrame
    react 面试题
    useState使用和原理
    常用网址记录
    .net 学习官网
    centos nginx 设置开启启动
    Asp.Net Core 发布和部署 Linux + Nginx
    SQL Server 执行计划缓存
    SQL Server之索引解析(二)
    SQL Server之索引解析(一)
  • 原文地址:https://www.cnblogs.com/Yuuki-/p/10625299.html
Copyright © 2011-2022 走看看