数据结构day3(2023.7.17)

news2024/11/28 4:31:35

一、Xmind整理:

二、课上练习:

练习1:时间复杂度

时间复杂度:只保留最高阶
    f(n)=3*n^2+n^2+100+n
    T(n)=O(3*n^3+n^2+100+n)=O(3*n^3)=O(n^3)

1>O(1):常数阶
    int t=a; 1
    a=b;    1
    a=t;    1
    f(n)=3
    T(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=n

3> 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^2
    
    for(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^2

4> 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*m

5>O(log2n):对数阶
    int i=1;   1
    int n=8;   1
    while(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");
	else
		printf("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.coloradmin.cn/o/763985.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

selenium:鼠标模拟操作ActionChains

ActionChains 1.导入ActionChains包 from selenium.webdriver import ActionChains 2. 执行原理 调用ActionChains的方法时&#xff0c;不会立即执行&#xff0c;而是将所有的操作,按顺序存放在一个队列里&#xff0c;当你调用perform()方法时&#xff0c;队列中的事件…

EMC学习笔记(十五)射频PCB的EMC设计(二)

射频PCB的EMC设计&#xff08;二&#xff09; 1.滤波1.1 电源和控制线的滤波1.2 频率合成器数据线、时钟线、使能线的滤波 2.接地2.1 接地分类2.2 大面积接地2.3 分组就近接地2.4 射频器件接地2.5 接地时应该注意的问题2.6 接地平面的分布 1.滤波 1.1 电源和控制线的滤波 随着…

项目经理如何处理项目依赖性?

项目不是凭空产生的&#xff0c;项目管理中的依赖性涉及管理和安排项目任务&#xff0c;同时牢记其顺序和要求。如果开始任务B需要先完成任务A&#xff0c;那么可以说任务B依赖于任务A。 这现在听起来可能很简单&#xff0c;但在具有多个相互依赖的任务的复杂项目中&#xff0…

duilib绝对定位与相对定位

文章目录 前言1、绝对位置&#xff08;floattrue&#xff09;2、窗口3、布局及控件4、相对位置&#xff08;floatfalse&#xff09;5、窗口6、布局与控件7、嵌套在布局与控件之中的布局与控件 前言 duilib中窗口&#xff0c;布局&#xff0c;控件等在屏幕上的显示位置都是按照…

Selenium自动化测试-设置元素等待

selenium中有三种时间等待&#xff1a; 强制等待&#xff1a;sleep隐式等待&#xff1a;implicitly_wait显示等待&#xff1a;WebDriverWait 1.sleep 让程序暂停运行一定时间&#xff0c;等待时间到达后继续运行。 使用sleep&#xff0c;需先导入time模块&#xff0c;impor…

一.《某三国》人物属性及其相关属性

人物属性 1.找一个可以操控变化的属性来找 比如血量.坐标或者五铢(绑定金币),这里我们用五铢找 五铢只要打一个怪就会加一点 2.我们直接搜变化即可搜到 五铢地址0AD64EAC 3.我们CE给地址下访问 4.这里我们最后找第一条访问 因为他是被改变的 或者你CE给地址下写入 5.然后我…

BUFG/BUFGCE/BUFH/BUFHCE

对BUFG/BUFGCE/BUFH/BUFHCE简单了解。 下图为 7 系列 FPGA 时钟架构图&#xff1a; BUFG 全局时钟缓冲器。它的输入是IBUFG的输出&#xff0c;BUFG的输出到达FPGA内部的IOB、CLB、选择性块RAM的时钟延迟和抖动最小。BUFG连接的是芯片中的专用时钟资源&#xff0c;能减少信号…

【golang中的切片的相关知识点】[ ] slice

golang-切片 切片的定义和初始化切片的内存分析切片的操作获取长度和容量追加元素复制切片 切片的遍历切片的特性总结 Golang中的切片是一种灵活且强大的数据结构&#xff0c;它可以动态地增长和缩小。切片是基于数组的抽象&#xff0c;它提供了更方便的操作和更灵活的内存管理…

系列五、RocketMQ集群搭建(双主双从)

一、概览 二、集群特点 2.1、NameServer NameServer是一个几乎无状态节点&#xff0c;可集群部署&#xff0c;节点之间无任何信息同步。 2.2、Broker Broker部署相对复杂&#xff0c;Broker分为Master与Slave&#xff0c;一个Master可以对应多个Slave&#xff0c;但是一个Sla…

数字孪生和人工智能异同?

数字孪生和人工智能是两个近年来备受关注的前沿技术&#xff0c;在不同领域发挥着重要作用。虽然两者都涉及数据处理和模拟&#xff0c;但其本质和应用有着显著的区别。本文将介绍数字孪生和人工智能之间的联系和区别&#xff0c;以帮助读者更好地理解它们在不同场景下的作用。…

虚拟机(Ubuntu1804)相机与激光雷达联合标定实现过程记录

在智能小车录制的点云数据在rviz打开一定要修改Fixed Frame为laser_link&#xff0c;这样才能看到点云&#xff0c;注意此时用的是雷神激光雷达&#xff0c;话题名是lslidar_,可采用rostopic list查看具体名称 1、新建一个终端打开roscore roscore2、在文件夹libratia中新建一…

Jmeter常用功能-参数化介绍

JMeter也有像LR中的参数化&#xff0c;本篇就来介绍下JMeter的参数化如何去实现。 参数化&#xff1a;录制脚本中有登录操作&#xff0c;需要输入用户名和密码&#xff0c;假如系统不允许相同的用户名和密码同时登录&#xff0c;或者想更好的模拟多个用户来登录系统。 这个时…

idea2023.3安装及配置

idea2023.3安装及配置 一.安装idea 1.卸载旧版本idea 2.下载idea旗舰版 Download IntelliJ IDEA: The Capable & Ergonomic Java IDE by JetBrains 旗舰版是收费的需要破解&#xff0c;社区版是免费的不需要破解&#xff0c;开发人员建议旗舰版 3.安装idea 修改安装目…

[LINUX]之文本匹配多行

在linux中创建文本如下&#xff1a; &#xff08;1&#xff09;显示test.txt文件里匹配test3字符串那行以及上下1行 cat test.txt |grep -C 1 test3 &#xff08;2&#xff09;显示test.txt文件里匹配test3字符串那行以及下面2行 cat test.txt |grep -A 2 test3 &#xff08;3&…

Qt6 Qt Quick UI原型学习QML第四篇

文章目录 布局项目【对齐】QML语句QML语法解释 布局项目【对齐】 QML提供了一种灵活的方式来使用锚来布局项目。锚定的概念是项目的基础&#xff0c;并且可用于所有视觉QML元素。锚的作用就像一个契约&#xff0c;比竞争的几何变化更强。锚是相对性的表达&#xff1b;你总是需…

三季度上市,比亚迪海豹DM-i内饰官图发布,延续海洋风格

据报道&#xff0c;比亚迪海洋网旗下全新车型海豹 DM-i今日发布了内饰官方图片。新车内部采用了独特的“海洋美学”设计理念&#xff0c;并体现了海洋网最新一代内饰风格。消息称&#xff0c;这款车型将于第三季度上市&#xff0c;定位为中大型混合动力轿车。 值得注意的是&…

【QT】元对象系统学习笔记(一)

QT元对象系统 01、元对象系统1.1、 元对象运行原则1.2、 Q_OBJECT宏1.3、 Qt Creator启动元对象系统1.4、 命令行启动元对象&#xff08;不常用&#xff09; 02、反射机制2.1、 Qt实现反射机制2.2、 反射机制获取类中成员函数的信息2.1.1、 QMetaMethon类2.1.2、QMetaObject类 …

【程序员必须掌握哪些算法?】

一个程序员一生中可能会邂逅各种各样的算法&#xff0c;但总有那么几种&#xff0c;是作为一个程序员一定会遇见且大概率需要掌握的算法。今天就来聊聊这些十分重要的“必抓&#xff01;”算法吧~ 常见算法介绍 本文所介绍的排序算法均以升序为例。 文章目录 常见算法介绍一 …

【解决】mysql卸载之后安装不同的版本导致mysqld无法启动

解决mysql不同版本之间数据的冲突 一. 背景二. 出现的问题三. 问题的原因四. 解决方式 一. 背景 说起来也是个巧合&#xff0c;在我安装mysql5.7版本的时候&#xff0c;看走眼了&#xff0c;安装成mysql8.0版本的了。于是乎&#xff0c;我当时觉得8.0&#xff0c;嗯&#xff0…

机械臂多任务逆运动学(优先级同等和存在优先级)

我们经常使用微分运动学来计算机器人的逆运动学&#xff0c;对于单个任务的机械臂的逆运动学使用的是梯度投影法&#xff1a; 冗余机械臂求解逆运动学解——梯度投影法 但是对于多任务的逆运动学在一般的机器人学里面很少有提及&#xff0c;最近看到了相关的论述&#xff0c;…