数据结构day3(2023.7.17)

一、Xmind整理:

二、课上练习:

练习1:时间复杂度

时间复杂度:只保留最高阶f(n)=3*n^2+n^2+100+nT(n)=O(3*n^3+n^2+100+n)=O(3*n^3)=O(n^3)1>O(1):常数阶int t=a; 1a=b;    1a=t;    1f(n)=3T(n)=O(3)=O(3*n^0)=O(n^0)=O(1)2>O(n): 线性阶for(int i=1;i<=n;i++)    n+1{printf("1");          n}f(n)=n*2+1=n3> O(n^2): 平方阶for(int i=1;i<=n;i++)    n+1{for(int j=1;j<=n;j++) n*(n+1){printf("1");        n*n}    }f(n)=2*n^2+2*n+1--->n^2for(int i=1;i<n;i++)  n{for(int j=0;j<n-i;j++) (n-1)*(n-i){printf("1");        (n-1)*(n-i-1)}    }f(n)=n^24> O(n^3): 立方阶for(int i=1;i<=n;i++) n+1{for(int j=1;j<=m;j++) n*(m+1){for(int k=1;k<=n;k++) n*m*(n+1){printf("1");       n*m*n         }            }}f(n)=2*n^2*m+2*n*m+1=2*n^2*m=n^2*m5>O(log2n):对数阶int i=1;   1int n=8;   1while(i<n) log2 n +1{i*=3;    123   log2 n}f(n)=2*log2 n  +3=log2n

三、课后作业:

1.顺序表按下标/数据元素实现增、删、改、查

head.h

//预处理命令
//函数声明
//全局变量
#ifndef __HEAD_H__
#define __HEAD_H__#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXSIZE 8
typedef int datatype;
//定义顺序表
typedef struct
{//顺序表长度int len;//数据元素datatype data[MAXSIZE];
}Seqlist;
Seqlist *create_list();
int full_list(Seqlist *list);
int insert_rear(datatype e,Seqlist *list);
int empty(Seqlist *list);
void output(Seqlist *list);
int delete_rear(Seqlist *list);
datatype search_by_sub(int sub,Seqlist *list);
int update_by_sub(Seqlist *list,int sub,datatype e);
int insert_by_sub(Seqlist *list,int sub,datatype e);
int delete_by_sub(Seqlist *list,int sub);
int search_by_data(datatype key,Seqlist *list);
int update_by_data(datatype key,datatype e,Seqlist *list);
int insert_by_data(datatype key,datatype e,Seqlist *list);
int delete_by_data(datatype key,Seqlist *list);
#endif

test.c 

//写自定义函数
#include "head.h"
/** function:    顺序表在堆区申请空间* @param [ in] * @param [out] * @return      */
Seqlist *create_list()
{Seqlist *list=(Seqlist *)malloc(sizeof(Seqlist));if(NULL==list){return NULL;}list->len=0; //顺序表长度清零memset(list->data,0,sizeof(list->data));
}
/** function:    判断顺序表满* @param [ in] * @param [out] * @return      满返回-1 不满返回0*/		
int full_list(Seqlist *list)
{return list->len==MAXSIZE?-1:0;
}
/** function:    尾插,插入一个* @param [ in] * @param [out] * @return      成功返回0 失败返回-1*/
int insert_rear(datatype e,Seqlist *list)
{if(NULL==list||full_list(list)){printf("insert rear error\n");return -1;}list->data[list->len]=e;list->len++;return 0;
}
/** function:    顺序表为空* @param [ in] * @param [out] * @return      空返回-1 非空返回0*/
int empty(Seqlist *list)
{return list->len==0?-1:0;
}
/** function:    输出* @param [ in] * @param [out] * @return      */
void output(Seqlist *list)
{if(NULL==list||empty(list)){puts("output error");return;}for(int i=0;i<list->len;i++){printf("%d\t",list->data[i]);}puts("");
}
/** function:    尾部删除* @param [ in] * @param [out] * @return      成功返回0 失败返回-1*/
int delete_rear(Seqlist *list)
{if(NULL==list||empty(list)){puts("delete rear error");return -1;}printf("delete element is:%d\n",list->data[list->len+1]);list->len--;
}
/** function:    按下标查找* @param [ in] * @param [out] * @return      成功返回查找的值 失败返回-1*/
datatype search_by_sub(int sub,Seqlist *list)
{//1.判断顺序表是否存在//2.判断顺序表是否为空//3.判断下标是否合法if(NULL==list||empty(list)||sub<0||sub>=list->len){puts("search element error");return -1;}return list->data[sub];
}
/** function:    按下标修改* @param [ in] * @param [out] * @return      成功返回0 失败返回-1*/
int update_by_sub(Seqlist *list,int sub,datatype e)
{if(NULL==list||empty(list)||sub<0||sub>=list->len){return -1;}list->data[sub]=e;return 0;
}
/** function:    按下标插入* @param [ in] * @param [out] * @return      成功返回0 失败返回-1*/
int insert_by_sub(Seqlist *list,int sub,datatype e)
{if(NULL==list||full_list(list)||sub<0||sub>list->len){printf("insert error\n");return -1;}for(int i=list->len-1;i>=sub;i--){list->data[i+1]=list->data[i];}list->data[sub]=e;list->len++;return 0;
}
/** function:    按下标删除* @param [ in] * @param [out] * @return      成功返回0 失败返回-1*/
int delete_by_sub(Seqlist *list,int sub)
{if(NULL==list||empty(list)||sub<0||sub>=list->len){printf("delete error\n");return -1;}for(int i=sub;i<=list->len-1;i++){list->data[i]=list->data[i+1];}list->len--;return 0;
}
/** function:  按元素查找* @param [ in] * @param [out] * @return      成功返回元素下标 失败返回-1*/
int search_by_data(datatype key,Seqlist *list)
{//1.判断顺序表是否存在//2.判断顺序表是否为空if(NULL==list||empty(list)){return -1;}//3.按元素查找for(int i=0;i<list->len;i++){if(key==list->data[i]){return i;}}return -1;
}
/** function:    按元素修改* @param [ in] * @param [out] * @return      成功返回0 失败返回-1*/
int update_by_data(datatype key,datatype e,Seqlist *list)
{int sub=search_by_data(key,list);if(sub==-1){printf("update error\n");}list->data[sub]=e;return 0;
}
/** function:    按元素插入* @param [ in] * @param [out] * @return      成功返回0 失败返回-1*/
int insert_by_data(datatype key,datatype e,Seqlist *list)
{int sub=search_by_data(key,list);if(sub==-1)return -1;insert_by_sub(list,sub,e);return 0;
}
/** function:    按元素删除* @param [ in] * @param [out] * @return      成功返回0 失败返回-1*/
int delete_by_data(datatype key,Seqlist *list)
{int sub=search_by_data(key,list);if(sub==-1){printf("delete error\n");}delete_by_sub(list,sub);
}

main.c 

//写主函数
#include "head.h"
int main(int argc, const char *argv[])
{Seqlist *list=create_list();int n;printf("please enter n:");scanf("%d",&n);datatype e;//表示插入的值for(int i=0;i<n;i++){printf("please enter rear element:");scanf("%d",&e);insert_rear(e,list);}output(list);delete_rear(list);output(list);	//按下标查找int sub;printf("please search sub:");scanf("%d",&sub);e=search_by_sub(sub,list);if(e!=-1){printf("search element is:%d\n",e);}//按下标修改printf("please update sub:");scanf("%d",&sub);printf("please enter update element: ");scanf("%d",&e);update_by_sub(list,sub,e);output(list);//按下标插入printf("please insert sub:");scanf("%d",&sub);printf("please enter insert element:");scanf("%d",&e);insert_by_sub(list,sub,e);output(list);//按下标删除printf("please delete sub:");scanf("%d",&sub);delete_by_sub(list,sub);output(list);//按元素查找datatype key;printf("please enter search key:");scanf("%d",&key);int key_sub=search_by_data(key,list);if(key_sub==-1)puts("search error\n");elseprintf("find in %d\n",key_sub);//按元素修改printf("please enter update key:");scanf("%d",&key);printf("please enter update element: ");scanf("%d",&e);update_by_data(key,e,list);output(list);//按元素插入printf("please enter insert key:");scanf("%d",&key);printf("please enter insert element:");scanf("%d",&e);insert_by_data(key,e,list);output(list);//按元素删除printf("please enter delete key:");scanf("%d",&key);delete_by_data(key,list);output(list);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/26701.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 和 RabbitMQ 进行消息传递和处理

一、RabbitMQ 简介 RabbitMQ 是一个开源的消息代理软件&#xff0c;它实现了高级消息队列协议&#xff08;AMQP&#xff09;标准。它的官方客户端提供了多种编程语言的接口&#xff0c;包括 Python、Java 和 Ruby 等。它支持消息的持久化、多种交换机类型、消息通知机制、灵活…

Ubuntu 18.04 Docker 安装配置 Apollo 6.0

百度 Apollo 安装测试&#xff08;1&#xff09; Apollo 6.0 安装完全指南 在这一步出错&#xff1a; 进入到 Apollo 源码根目录&#xff0c;打开终端&#xff0c;执行下述命令以启动 Apollo Docker 开发容器 ./docker/scripts/dev_start.sh并没有成功启动 Apollo docker 开发…

gma 2.0.0a3 (2023.07.17) 更新日志

安装 gma 2.0.0a3 pip install gma2.0.0a3新增 1、为矢量要素&#xff08;Feature&#xff09;添加 【Difference】&#xff08;差集&#xff09;方法   取第一个矢量要素与第二个矢量要素的几何差集。  2、为矢量要素&#xff08;Feature&#xff09;添加几种几何形状测试…

LLaMA(Open and Efficient Foundation Language Models )论文解读(二)

此篇博客主题:LLAMA模型数据、训练时长、功耗及碳排放量 LLaMA: Open and Efficient Foundation Language Models paper https://arxiv.org/pdf/2302.13971v1.pdf 1 训练样本 Overall, our entire training dataset contains roughly 1.4T tokens after tokenization. For mo…

求根节点到叶节点数字之和

给你一个二叉树的根节点 root &#xff0c;树中每个节点都存放有一个 0 到 9 之间的数字。 每条从根节点到叶节点的路径都代表一个数字&#xff1a; 例如&#xff0c;从根节点到叶节点的路径 1 -> 2 -> 3 表示数字 123 。 计算从根节点到叶节点生成的 所有数字之和 。…

Ubuntu环境搭建

本文以Ubuntu 18.04为例 安装repo mkdir ~/bin export PATH~/bin:$PATH如果可以访问 google 的地址&#xff0c;下载 Repo 工具&#xff0c;并确保它可执行&#xff1a; curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo chmod ax ~/bin/rep…

left join 和except方法区别和联系

目录 相同点&#xff1a; left join except 不同点 假设有两个表&#xff1a;A客户表 和 B客户表&#xff0c;客户uid是唯一主键 相同点&#xff1a; 查询在A中的客户 但不在B中&#xff0c;也就是图中的阴影部分&#xff0c;left join 和except方法都可以实现 left join …

自动化运维工具——Ansible学习(二)

目录 一、handlers和notify结合使用触发条件 1.新建httpd.yml文件 2.复制配置文件到ansible的files目录中 3.卸载被控机已安装的httpd 4.执行httpd.yml脚本 5.更改httpd.conf配置文件 6.使用handlers 7.重新执行httpd.yml脚本 8.检查被控机的端口号是否改变 9.handle…

Java 设计模式——装饰者模式

目录 1.概述2.结构3.案例实现3.1.抽象组件3.2.具体组件3.3.抽象装饰3.4.具体装饰3.5.测试 4.优缺点5.使用场景6.JDK 源码解析——BufferedWriter7.装饰者模式和静态代理的比较 1.概述 &#xff08;1&#xff09;我们先来看一个快餐店的例子&#xff1a;快餐店有炒面、炒饭这些…

【DC-DC】AP5193 DC-DC宽电压LED降压恒流驱动器 LED电源驱动IC

产品 AP5193是一款PWM工作模式,高效率、外围简单、内置功率MOS管&#xff0c;适用于4.5-100V输入的高精度降压LED恒流驱动芯片。最大电流2.5A。AP5193可实现线性调光和PWM调光&#xff0c;线性调光脚有效电压范围0.55-2.6V.AP5193 工作频率可以通过RT 外部电阻编程来设定&…

怎么自学网络安全?遇到问题该怎么解决?

趁着今天下班&#xff0c;我花了几个小时整理了下&#xff0c;非常不易&#xff0c;希望大家可以点赞收藏支持一波&#xff0c;谢谢。 我的经历&#xff1a; 我 19 年毕业&#xff0c;大学专业是物联网工程&#xff0c;我相信很多人在象牙塔里都很迷茫&#xff0c;到了大三大…

Kafka学习笔记(高级篇)

目录 高级功能 高效读写 涉及技术 ZooKeeper 自定义拦截器 监控 延迟消费 一些改进手段 高级功能 高效读写 涉及技术 高吞吐量&#xff1a;Kafka 每秒可以处理数百万消息。这是因为 Kafka 消息的处理是以批处理&#xff08;Batching&#xff09;的方式来完成的&…