当前位置: 首页 > news >正文

数据结构总复习

文章目录

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

线性表

动态分配的顺序存储结构

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

  • 要分清你的下标
  • 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++;
	
}

顺序表优点与缺点

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

链式存储

在这里插入图片描述

相关文章:

  • Github Copilot AI编码完成工具
  • 【限时免费】20天拿下华为OD笔试之【双指针】2023Q1A-两数之和绝对值最小【欧弟算法】全网注释最详细分类最全的华为OD真题题解
  • 逻辑回归
  • 激光塑料透光率检测仪进行材料质量监控
  • 【数据库篇】关系模式的表示——(1)问题的提出
  • 目标检测 详解SSD原理,数据处理与复现
  • SparkSession介绍
  • mysql 性能参数调优详解
  • 随便问问webtab的记录(1)
  • HTML网站稳定性状态监控平台源码
  • Log4j2.xml不生效:WARN StatusLogger Multiple logging implementations found:
  • 【C++初阶】STL详解(五)List的介绍与使用
  • Java核心知识点整理大全9-笔记
  • 【计算机网络】(网络层)定长掩码和变长掩码
  • 华为云cce健康检查有什么用?配置需要注意什么?
  • Spark的通用运行流程与Spark YARN Cluster 模式的运行流程
  • Vue使用基本教程(基本介绍及对比,初步使用,构建项目,编辑器等)
  • 探究Kafka原理-1.初识Kafka
  • AI原生应用为百度带来新增量
  • 如何使用Mondo Rescue备份及恢复Linux系统(制作ISO镜像,成功恢复)
  • 迪奥部分客户数据遭泄露,公司称正持续展开调查
  • 印称印巴军事行动总指挥同意将局势降级
  • 扶桑谈|从石破茂“越菲行”看日本周边外交布局战略新动向
  • 浙江公开征集涉企行政执法问题线索,包括乱收费、乱罚款等
  • 普京:俄中关系是国家间关系的真正典范
  • 山西忻州市人大常委会副主任郭建平接受审查调查