数据结构总复习

news2025/4/7 21:30:40

文章目录

  • 线性表
    • 动态分配的顺序存储结构
    • 链式存储

线性表

动态分配的顺序存储结构

通过分析代码,我们发现,要注意什么:

  • 要分清你的下标
  • Insert 函数是可以用来没有元素的时候,增加元素的
  • Init(或者Create )函数一般只用来分配空间等的初始化
//动态分配空间的顺序存储结构的线性表
#include<stdio.h>
#include<stdlib.h>

#define Linitesize 100
#define Laddsize 10
#define OK 1
#define error 0

typedef int Status;
typedef int Elemtype;
typedef struct{
	Elemtype * elem;
	int length;
	int listsize;
}SqList;
void Show(SqList L)
{
	int i;
	for(i=0;i<L.length ;i++)
		printf("%d ",L.elem[i]);
	printf("\n");
	return ;
}
Status Create(SqList &L)
{
	L.elem = (Elemtype *)malloc(Linitesize*sizeof(Elemtype));
	if(!(L.elem ))
	return error;
	L.length = 0;
	L.listsize = Linitesize;
	return OK;
} 
//在第i个元素之前插入 ,从1开始计数,就是下标为i
Status Insert(SqList &L,int i,Elemtype e)
{
	
	int j;
	if(i<1||i>L.length+1 )
	return error;

	if(L.length>=L.listsize)
	{
		L.elem =(Elemtype *)realloc(L.elem ,(L.listsize + Laddsize)*sizeof(Elemtype));
		if(!(L.elem ))
		return error;
		L.listsize = L.listsize + Laddsize;
	}
	
	for(j=L.length-1 ;j>=i-1;j--)
		L.elem[j+1] = L.elem[j];
		
	L.elem[i-1] = e;
	L.length ++;
	return OK;
	
 } 
//i为你想要删除的第几个元素 
Status Delete(SqList &L,int i,Elemtype &e)
{
	int j;
	if(i<1||i>L.length )
	return error;
	e = L.elem[i-1];
	
	for(j=i-1;j<L.length-1;j++)
		L.elem[j] = L.elem[j+1];
	L.length --;
	return OK;
}

int main()
{
	int i,j;
	Elemtype e;
	SqList L;

	Create(L);

	for(i=1;i<=5;i++)
		Insert(L,i,i*i);	
	printf("输出具体数据:\n");
	Show(L);
	printf("请输入你想要删除第几个元素:\n");
	scanf("%d",&j);
	Delete(L,j,e);
	printf("删除的数据是:%d \n",e);
	Show(L);
	
	return 0;
}

 

考点

  • 两个有序递增的顺序表的合并

关键点,可以学到什么,就是分别用pa,pb,pc,来记录首地址,一句话,就是用辅助变量来方便操作

void Merge(Sqlist la,Sqlist lb,Sqlist &lc)
//目标,将原本有序递增的la,pb顺序表整合到lc ,lc认为有序递增的
{
	pa = la.elem;
	pb = la.elem;
	lc.listsize = lc.length = la.length + lb.length;
	pc =lc.elem = (ElemType *)malloc(lc.listsize*(sizeof(ElemType)));
	if(!lc.elem)
	exit OVERFLOW;
	pa_last = pa + la.length-1;
	pb_last = pb + lb.length-1;
	while(pa<=pa_last&&pb<=pb_last)
	{
		if(*pa<*pb) *pc++ = *pa++;
		else *pc++ = *pb++;
	}
	while(pa<=pa_last) *pc++ = *pa++;
	while(pb<=pb_last) *pc++ = *pb++;
	
}

顺序表优点与缺点

  • 优点:可以随便进行数据的插入与删除
  • 优点:占据较少的空间
  • 缺点:需要连续的一串地址
  • 缺点:在插入与删除时,要移动大量的元素

链式存储

在这里插入图片描述

//动态分配空间的顺序存储结构的线性表
#include<stdio.h>
#include<stdlib.h>

#define Linitesize 100
#define Laddsize 10
#define OK 1
#define error 0

typedef int Status;
typedef int Elemtype;

typedef struct LNode{
	struct LNode * next;
	Elemtype data;
}LNode,*LinkList;
int Length(LinkList L)
{
	int sum=0;
	while(L->next !=NULL)
	{
		sum++;
		L=L->next ;
	}
	return sum;
}
//尾插法 
Status Create(LinkList &L,Elemtype e)
{
	LinkList p = L;//开始p 指向头结点 
	while(p->next !=NULL )//找到最后一个结点 
		p=p->next ;
		
	LinkList temp = (LNode *)malloc(sizeof(Elemtype));
	if(!temp) return error;
	temp->data = e;
	//由于p 指向最后一个结点,那么p->next 进行赋值,实际上会改变原来的数据
	
	temp->next = p->next ;
	p->next = temp;
	
	return OK;
	
}
Status Show(LinkList L)
{
	LinkList p = L->next  ;
	while(p !=NULL)
	{
		printf("%d ",p->data );
		p = p->next ;
	}
	printf("\n");
	return OK;
}
//在第i 个元素之前插入 ,确保不超过范围 
Status Insert(LinkList &L,int i,Elemtype e)
{
	if(i<1||i>Length(L)+1)
	return error;
	LinkList p = L;//指向头结点
	//找到第i-1个结点
	int j ;
	for(j=1;j<i;j++)
		p = p->next ; 
	
	LinkList temp = (LNode * )malloc(sizeof(LNode));
	if(!temp) return error;
	temp->data = e;
	
	temp->next = p->next ;
	p->next = temp;
	return OK;
}
Status Delete(LinkList &L,int i,Elemtype &e)
{
	//删除第i 个元素,并返回其值
	 if(i<1||i>Length(L))
	 return error;
	 //找到第i-1个结点
	 int j;
	 LinkList temp = L;
	 for(j=1;j<i;j++)
	 	temp = temp->next ;
	 e = temp->next->data;
	 temp->next = temp->next->next;
	 
	 return OK;
}
int main()
{
	Elemtype e;
	LinkList L = (LNode *)malloc(sizeof(LNode));
	L->next = NULL;
	for(int i = 1;i<= 5;i++)
		Create(L,i);
	Show(L);
	Insert(L,2,10);
	Show(L);
	Delete(L,3,e);
	Show(L);
	printf("%d \n",e);
	return 0;
	
	
}



 

应用

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

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

相关文章

关于泛型方法重写的问题--继承/重写/泛型

第二张图中的抽象类实现了图1 中的泛型接口;其中图2中的handler方法重写图1中的接口方法是没有问题的,但是图2中的next泛型方法指定类型重写图1中的泛型方法next却是有问题的,为什么? 其中

2023-11-25 LeetCode每日一题(二叉树中的伪回文路径)

2023-11-25每日一题 一、题目编号 1457.二叉树中的伪回文路径二、题目链接 点击跳转到题目位置 三、题目描述 给你一棵二叉树&#xff0c;每个节点的值为 1 到 9 。我们称二叉树中的一条路径是 「伪回文」的&#xff0c;当它满足&#xff1a;路径经过的所有节点值的排列中…

R语言期末复习一

创建一个长度为7的字符向量&#xff0c;元素为"A", "B", "C", "D", "E", "F", "G"&#xff0c;并命名为vec1。 创建一个因子&#xff0c;包含6个水果&#xff1a;"apple", "banana"…

leetcode做题笔记1457. 二叉树中的伪回文路径

给你一棵二叉树&#xff0c;每个节点的值为 1 到 9 。我们称二叉树中的一条路径是 「伪回文」的&#xff0c;当它满足&#xff1a;路径经过的所有节点值的排列中&#xff0c;存在一个回文序列。 请你返回从根到叶子节点的所有路径中 伪回文 路径的数目。 示例 1&#xff1a; 输…

YOLO目标检测——二维码检测数据集下载分享【含对应voc、coco和yolo三种格式标签】

实际项目应用&#xff1a;二维码识别、追踪与管理系统数据集说明&#xff1a;二维码检测数据集&#xff0c;真实场景的高质量图片数据&#xff0c;数据场景丰富标签说明&#xff1a;使用lableimg标注软件标注&#xff0c;标注框质量高&#xff0c;含voc(xml)、coco(json)和yolo…

前端review

关于实时预览vs code中的颜色代码需要安装的插件&#xff0c;包括html文件格式中的颜色代码安装Flutter Color插件 VSCode 前端常用插件集合 1.Auto Close Tag自动闭合HTML/XML标签 2.Auto Rename Tag自动完成另一侧标签的同步修改 3.Beautify格式化代码&#xff0c;值得注…

什么是判断能力?如何提高判断能力?

什么是判断能力&#xff1f; 人的大脑跟电脑有有着相似的工作原理&#xff0c;不论什么事情&#xff0c;如果要做出判断&#xff0c;那么首先是收集各类信息&#xff0c;跟这个事件相关的各种资料&#xff0c;仅供大脑的分析后&#xff0c;得出一个结论&#xff0c;从而形成判…

代码随想录算法训练营第五十五天|583. 两个字符串的删除操作 72. 编辑距离

文档讲解&#xff1a;代码随想录 视频讲解&#xff1a;代码随想录B站账号 状态&#xff1a;看了视频题解和文章解析后做出来了 583. 两个字符串的删除操作 class Solution:def minDistance(self, word1: str, word2: str) -> int:dp [[0] * (len(word2)1) for _ in range(…

24年天津天狮专升本计算机科学与技术专业《C语言程序设计》考纲

2024年天津天狮学院计算机科学与技术专业高职升本入学考试《C语言程序设计》考试大纲 一、考试性质 《C语言程序设计》专业课程考试是天津天狮学院计算机科学与技术专业高职升本 入学考试的必考科目之一&#xff0c;其性质是考核学生是否达到了升入本科继续学习的要求而进行的…

Flink CDC -Sqlserver to Sqlserver java 模版编写

1.基本环境 <flink.version>1.17.0</flink.version> 2. 类文件 package com.flink.tablesql;import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.StringUtils; import org.apache.flink.streaming.api.environment.StreamExecutionEnviro…

leetCode 1026. 节点与其祖先之间的最大差值 + 递归

1026. 节点与其祖先之间的最大差值 - 力扣&#xff08;LeetCode&#xff09; 给定二叉树的根节点 root&#xff0c;找出存在于 不同 节点 A 和 B 之间的最大值 V&#xff0c;其中 V |A.val - B.val|&#xff0c;且 A 是 B 的祖先。&#xff08;如果 A 的任何子节点之一为 B&am…

【单片机学习笔记】STC8H1K08参考手册学习笔记

STC8H1K08参考手册学习笔记 STC8H系列芯片STC8H1K08开发环境串口烧录 STC8H系列芯片 STC8H 系列单片机是不需要外部晶振和外部复位的单片机&#xff0c;是以超强抗干扰/超低价/高速/低功耗为目标的 8051 单片机,在相同的工作频率下,STC8H 系列单片机比传统的 8051约快12 倍速度…

求两对整点坐标连线之间是否存在其他的整点坐标。

证明过程非常的简单&#xff1a; 有两对整点&#xff08;x1&#xff0c;y1&#xff09;&#xff08;x2,y2)&#xff0c;我们现在以(x1&#xff0c;y1)为原点&#xff0c;那么&#xff08;x2&#xff0c;y2)的相对坐标就是&#xff08;x2-x1&#xff0c;y2-y1&#xff09; 设 …

C++ day36 贪心算法 无重叠区间 划分字母区间 合并区间

题目1&#xff1a;435 无重叠区间 题目链接&#xff1a;无重叠区间 对题目的理解 移除数组中的元素&#xff0c;使得区间互不重叠&#xff0c;保证移除的元素数量最少&#xff0c;数组中至少包含一个元素 贪心算法 局部最优&#xff0c;使得重叠区间的个数最大&#xff0c…

mysql高级知识点

一、mysql架构 连接层&#xff1a;负责接收客户端的连接请求&#xff0c;可以进行授权、认证(验证账号密码)。服务层&#xff1a;负责调用sql接口&#xff0c;对sql语法进行解析&#xff0c;对查询进行优化&#xff0c;缓存。引擎层&#xff1a;是真正进行执行sql的地方&#x…

WIFI模块(esp-01s)获取网络时间与天气信息

目录 一、硬件连接 二、获取网络时间 1、AT指令集 2、具体操作 三、获取天气信息 1、心知天气注册 2、AT指令集 3、具体操作 4、json格式检查 一、硬件连接 WiFi模块的RX连接TTL模块的TX&#xff0c; WiFi模块的TX连接TTL模块的RX&#xff0c;电源与地接对。 插入电脑…

Python NeuralProphet库: 高效时间序列预测的利器

更多Python学习内容&#xff1a;ipengtao.com 时间序列数据在许多领域中都扮演着关键的角色&#xff0c;从股票价格到气象数据。为了更准确地预测未来趋势&#xff0c;机器学习领域涌现出许多时间序列预测的方法和工具。其中&#xff0c;NeuralProphet库是一个强大的工具&#…

【涂鸦T2-U】1、开发环境搭建

前言 本章介绍T2-U的开发环境搭建流程&#xff0c;以及一些遇到的问题。 一、资料 试用网址&#xff1a; 【新品体验】涂鸦 T2-U 开发板免费试用 涂鸦官网文档&#xff1a; 涂鸦 T2-U 开发板 T2-U 模组规格书 T2-U 开发板 淘宝(资料较全)&#xff1a; 涂鸦智能 TuyaOS开发…

第二十章 解读PASCAL VOC2012与MS COCO数据集(工具)

PASCAL VOC2012数据集 Pascal VOC2012官网地址&#xff1a;http://host.robots.ox.ac.uk/pascal/VOC/voc2012/ 官方发表关于介绍数据集的文章 《The PASCALVisual Object Classes Challenge: A Retrospective》&#xff1a;http://host.robots.ox.ac.uk/pascal/VOC/pubs/everi…

1.1 C语言之入门:使用Visual Studio Community 2022运行hello world

1.1 使用Visual Studio Community 2022运行c语言的hello world 一、下载安装Visual Studio Community 2022 与 新建项目二、编写c helloworld三、编译、链接、运行 c helloworld1. 问题记录&#xff1a;无法打开源文件"stdio.h"2. 问题记录&#xff1a;调试和执行按钮…