数据结构与算法

数据结构

1.数据结构的基本概念

1.1数据结构发展:

1968年,一个美国的教授开创了数据结构课程,研究的是数据怎么进行存储,怎么表示数据组织关系的课程。

数据结构:

就是指数据的关系和数据的存储以及对数据的操作

学习数据的存储有哪些表示,以及存储数据之间的关系怎么表示,(存储有哪几种,关系有哪几种)并且之后过程可以使用哪些数据结构,是学习这一门课程的主要目的。

程序的出库不在是单纯的数值,而是描述一个信息,解决数据如何在计算机中存储,表示数据与数据之间关系的内容

数据与数据之间不是孤立存在的,数据之间存在着某种联系(关系:线性关系、层次关系、网状关系)

1.2数据结构相关概念

1.数据:能够输入到计算机,且能够被计算机识别处理、存储、显示的内容

2.数据元素:数据的基本单位,就是一个完整的数据内容。如:书(编号,书名,出版社,作者,出版日期等)

3.数据项:数据元素的单元,如:书-------编号

4.数据结构:就是研究非数值类型数据的相互之间关系,存储与运算

1.关系:逻辑结构

数据元素之间的抽象关系(先后、层次、从属、邻接)

集合结构、线性结构、树形结构、图形结构

2.存储:存储结构

数据的存储结构,数据在计算机中的存储方式

顺序存储、链式存储(离散存储)、索引存储、散列存储

3.数据运算

对数据能够进行插入、删除、查找、排序

4.四种逻辑结构

数据与数据之间的联系规律关系,就叫做逻辑关系,也叫作逻辑结构

集合:

所有的数据元素之间没有必然的联系,只是有共同的特点、属性

线性:

数据元素之间具有一定的先后顺序

树型:

数据元素之间是层次方式来表示关系,有一定的包含、从属关系

图型:

数据与数据之间有多种关系存在

5.四种存储结构

数据以指定的方式存储在计算机中

顺序:

数据元素在存储空间(内存)是连续的,一个接一个存储

链式:

数据元素在存储空间不一定是连续的,数据元素一个可能存储在A地址,另一个存储在B地址,把数据串联起来。

索引:

顺序和链式结合,;如:电话本

散列:

重点掌握顺序存储和链式存储

6.数据运算

增、删、改、查

 

之后在存储数据时,我们就可以根据数据的特点,选择一种逻辑结构(能够表示出数据的关系),再选择一种存储结构(在计算机中如何存储数据),最终完成数据的存储

2.存储:存储结构

2.算法的概念

2.1算法

解决问题的步骤描述

在计算机中算法是一个又穷的指令(语句)有序集合

2.2算法与程序的区别

算法是解决问题的方式方法(步骤描述):功能的实现描述

程序是用计算机语言的具体实现

区别:算法可以不依赖于计算机语言,而程序必须依赖计算机语言的实现

2.3.算法的好坏判断

1.正确性:能否正确的解决问题

2.效率:消耗时间多少,消耗空间多少

3.编程:算法结构要好,易于理解,编码和测试

2.4算法效率的度量

2.4.1.时间

1.事后统计:把算法实现进行运行,统计运行前和运行后的时间之差,就是算法功能运行的时间-----存在其他影响

2.事先估算:认为cpu执行每条语句的时间都是一致的,通过统计语句的执行次数来做估算

3.语句频度:在算法中一条语句执行的次数

语句频度之和(每一条语句执行次数之和)就是事先估算的算法时间。

在循环中语句频度是不定的,把语句的频度不定的情况叫做问题规模,用n表示。

4.算法的时间复杂度:在算法中可执行的语句频度之和,就叫做时间复杂度,记作:T(n)

大O表示法:(让n趋近无穷大的表示方式,只留下最大次幂)

2.4.2.空间

空间复杂度:实现算法所需要的空间大小S(n);

3.数据结构

数据结构:就是根据需要存储的数据,选择具体的逻辑结构与存储结构来存储数据

3.1线性表

逻辑结构:

在程序存储多个数据,如果在数据之间存在一定的先后顺序,叫做线性结构,也叫作线性表

 

存储结构:

1.顺序存储:

用一段连续的空间来进行存储数据,当存储了数据需要把对应的关系也描述出来

2.链式存储:

逻辑结构+存储结构==数据在计算机中存储--》数据结构

顺序表:

逻辑结构:线性表(线性关系)

存储结构:顺序存储

 

顺序表的实现:

  • 一段连续的空间,通过地址来表示

  • 需要记录元素的个数

顺序表的运算:

插入

删除

修改

查找

清空

创建

#include<stdio.h>
#include<stdlib.h>
//实现顺序表,顺序表就是用于存储先后关系的数据
//顺序表        
struct list_table 
{
    
        int age[10];//由于是顺序存储地址表示关系,所以不用额外定义关系的表达    
        int num;
};
​
//创建顺序表
struct list_table *creat ()
{
        //struct list_table sql;//结构体变量 ,离开函数创建的顺序表消亡
        struct list_table *slist=(struct list_table *)malloc(sizeof(struct list_table));//申请在堆区不会被释放
         
        slist->num=0; 
    
        return slist;
} 
 //判断顺序表是否存储满
 int full (struct list_table *slist)
 {
        if(slist->num==10)
         {
            printf("is full!\n");
            return 1;
              
         }
         else
            return 0;
    
    
    
 } 
 //添加,---往顺序表添加数据;
void add(struct list_table *slist,int addage)//顺序表末尾添加一个数据 
 {
        if(full(slist))
        return ;
            
            slist->age[slist->num]=addage; //添加一个数据
            slist->num++;//个数+1 
 } 
 
 //插入----往顺序表指定位置插入
void insert (struct list_table *slist,int addage,int post)
 {
            if(full(slist)||(post>slist->num-1))
            return ;
            for(int i=slist->num-1;i>=post;i--)
             {
                
                slist->age[i+1]=slist->age[i];
    
    }
        slist->age[post]=addage;
        slist->num++;
 }
 //判断为空 
 int empty (struct list_table *slist)
 {
        if(slist->num==0)
         {
            return 1;
        printf("is empty\n");
         }
         else 
         return 0;
        
 }
 //删除 
 void del(struct list_table *slist,int post)
 {              
            if(empty(slist)||post>slist->num-1)
                return ;  
                
            for(int i=post ;i<slist->num-1;i++)
             {
                slist->age[i]=slist->age[i+1];
                 slist->num--; 
             }
 } 
 //修改
 void update(struct
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

君民

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值