02——线性表

线性表

基本操作

Initlist(&L):初始化表
Length(L):求表长
LocateElem(L,e):按值查找操作
GetElem(L,i):按位查找操作
ListInsert(&L,i,e):插入操作
ListDelete(&L,i,&e):删除操作
PrintList(L):输出操作
Empty(L):判空操作
DestroyList(&L):销毁操作

顺序表

静态分配的顺序表存储结构

#define Maxsize 50
typedef struct{
	ElemType data[Maxsize];
	int length;
}SqList;

动态分配的顺序表存储结构

#define InitSize 100
typedef struct{
	ElemType *data;
	int Maxsize,length;
}SeqList;
L.data=(ElemType*)malloc(sizeof(ElemType)*InitSize);或
L.data=new ElemType[InitSize];

增加动态数组的长度 

#include <stdlib.h>
#define InitSize 10
typedef struct{
	int *data;
	int Maxsize,length;
}SeqList;

int main(){
	SeqList L;
	IniList(L);
	...
	IncreaseSize(L,5);
	return 0;
}

//初始化一个动态数组
void InitList(SeqList &L){
	L.data=(int*)malloc(InitSize*sizeof(int));
	L.length=0;
	L.MaxSize=InitSize;
}

//增加动态数组的长度
void IncreaseSize(SeqList &L,int len){
	int *p=L.data;
	L.data=(int*)malloc((L.MaxSize+len)*sizeof(int));
	for(int i=0;i<L.length;i++){
		L.data[i]=p[i];//注意访问p指针指向的数组
	}
	L.MaxSize=L.MaxSize+len;
	free (p);
}

静态分配顺序表的初始化

void InitList(SqList &L){
	for(int i=0;i<MaxSize;i++){
		L.data[i]=0;
	}
	L.length=0;
}
或者
void InitList(sqList &L){
    L.length=0;
}

动态分配顺序表的初始化

void InitList(SeqList &L){
	L.data=(ElemType*)malloc(InitSize*sizeof(ElemType));
	L.length=0;
	L.MaxSize=InitSize;
}

插入操作(位置在1~L.length+1之间)

bool ListInsert(SqList &L,int i,ElemType e){
     if(i<1||i>L.length+1)
	       return false;
     if(L.length>=MaxSize)//存储空间满
	       return false;
	 for(int j=L.length;j>=i;j--)
	       L.data[j]=L.data[j-1];//第i个元素后的元素后移
	 L.data[i-1]=e;
	 L.length++;
	 return true;
}

删除操作(位置在1~L.length之间)

bool ListDelete(SqList &L,int i,ElemType &e){
     if(i<1||i>L.length) return false;
	 e=L.data[i-1];
	 for(int j=i;j<L.length;j--)
	        L.data[j-1]=L.data[j];//第i个元素后的元素前移
	 L.length--;
	 return true;
}

按值查找

int LocateElem(SqList L,ElemType e){
     int i;
	 for(i=0;i<L.length;i++)//若为i<InitSize,则初始化要全部初始化为0,防止脏数据影响
	        if(L.data[i]==e)  return i+1;//返回位序i+1
	 return 0;
}

按位查找(静态分配和动态分配一样)

ElemType GetElem(SqList L,int i){
     return L.data[i-1];
}
补充:结构体的比较不能直接用==,应该一个一个元素比较。

链表

单链表

单链表节点结构

typedef struct LNode{
	ElemType data;
	struct LNode *next;
}LNode,*LinkList;
相当于
struct LNode{
    ElemType data;
	struct LNode *next;
};
typedef struct LNode LNode;
typedef struct LNode *LinkList;


LNode *L;//表明这是一个指向单链表第一个结点的指针,强调结点
LinkList L;//同上,更强调链表

单链表的初始化及判空(带头结点)

bool InitList(LinkList &L){
	L=(LNode*)malloc(sizeof(LNode));//分配第一个头结点
	if(L==NULL) return false; //内存不足,分配失败
	L->next=NULL;
	return true;
}

bool Empty(LinkList L){
	if(L->next==NULL) return true;
	else return false;
}

单链表的初始化及判空(不带头结点)

bool InitList(LinkList &L){
	L=NULL;
	return true;
}

bool Empty(LinkList L){
	if(L==NULL) return true;
	else return false;
}
或者
bool Empty(LinkList L){
    return (L==NULL):
}

求表长操作(带头结点)

int length(LinkList L){
    int len=0;//计数变量
	LNode* p=L;
	while(p->next!=NULL){
	     p=p->next;
		 len++;
    }
	return len;
}

按序号查找

LNode* GetElem(LinkList L,int i){
     if(i<0) return NULL;
     LNode *p=L;
	 int j=0;//记录当前结点的位序,头结点为第0个结点,方便把结点插在第1个位置
	 while(p!=NULL&&j<i){
	       p=p->next;
		   j++;
	 }
	 return p;//返回指向第i个结点的指针或NULL
}

按值查找

LNode *LocateElem(LinkList L,ElemType e){
	LNode *p=L->next;
	while(p!=NULL&&p->data!=e){
		p=p->next;
	}
	return p;//找到则返回该结点指针,否则返回NULL
}

按位序插入(带头结点)

bool ListInsert(LinkList &L,int i,ElemType e){
	if(i<1) return false;
	LNode *p=L;
	int j=0;//头结点是第0个结点
	while(p!=NULL&&j<i-1){//找到第i-1个结点
		p=p->next;
		j++;
	}
	if(p==NULL) return false;//i值不合法
	LNode *s=(LNode*)malloc(sizeof(LNode));
	s->data=e;
	s->next=p->next;
	p->next=s;
	return true;
}

按位序插入(不带头结点)

bool ListInsert(LinkList &L,int i,ElemType e){
	if(i<1) return false;
	if(i==1){//仅第1一个结点与带头结点的操作不同
		LNode *s=(LNode*)malloc(sizeof(LNode));
		s->data=e;
		s->next=L;
		L=s;
		return true;
	}
	
	LNode *p=L;
	int j=1;//没有头结点了
	while(p!=NULL&&j<i-1){//找到第i-1个结点
		p=p->next;
		j++;
	}
	if(p==NULL) return false;//i值不合法
	LNode *s=(LNode*)malloc(sizeof(LNode));
	s->data=e;
	s->next=p->next;
	p->next=s;
	return true;
}

指定结点的后插操作 

bool InsertNextNode(LNode *p,ElemType e){//在p结点之后插入元素e
	if(p==NULL) return false;
	LNode *s=(LNode*)malloc(sizeof(LNode));
	if(s==NULL) return false; //内存分配失败
	s->data=e;
	s->next=p->next;
	p->next=s;
	return true;
}

指定结点的前插操作

bool InsertPriorNode(LNode *p,ElemType e){
	if(p==NULL) return false;
	LNode *s=(LNode*)malloc(sizeof(LNode));
	if(s==NULL) return false;//内存分配失败
	s->next=p->next;
	p->next=s;
	s->data=p->data;
	p->data=e;
	return true;
}

按位序删除(带头结点)

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis开源社区持续壮大,华为云为Valkey项目注入新的活力

背景 今年3月21日&#xff0c;Redis Labs宣布从Redis 7.4版本开始&#xff0c;将原先比较宽松的BSD源码使用协议修改为RSAv2和SSPLv1协议&#xff0c;意味着 Redis在OSI&#xff08;开放源代码促进会&#xff09;定义下不再是严格的开源产品。Redis官方表示&#xff0c;开发者…

QT--1

类型界面 #include "mywidget.h"myWidget::myWidget(QWidget *parent): QWidget(parent) {//窗口相关设置this->resize(680,520);this->setFixedSize(680,520);this->setWindowTitle("Tim");this->setWindowFlag(Qt::FramelessWindowHint);th…

Git -- reset 详解

引言 当我们在项目中有多个人协同开发时候&#xff0c;难免会出现一些错误的提交或者删除了一些重要文件。我们需要回滚到指定的某一个节点。那些乱七八糟的各种提交都要清除掉。 这时候&#xff0c;我们的指令就要用到了。reset 正文 git reset。它的一句话概括 git-reset …

【C++之map的应用】

C学习笔记---021 C之map的应用1、map的简单介绍1.1、基本概念1.2、map基本特性 2、map的基本操作2.1、插入元素2.2、访问元素2.3、删除元素2.4、遍历map2.5、检查元素是否存在2.6、获取map的大小2.7、清空map2.8、基本样例 3、map的基础模拟实现4、测试用例4.1、插入和遍历4.2、…

Unreal游戏GPU性能优化检测模式全新上线

UWA已经在去年推出了针对于Unity项目的GPU性能优化工具&#xff0c;通过对GPU渲染性能、带宽性能以及各种下探指标&#xff0c;帮助Unity项目研发团队定位由GPU导致的发热耗电问题。这个需求在Unreal团队中也极为强烈&#xff0c;因此UWA将该功能移植到针对Unreal项目的GOT Onl…

react + xlsx 表格导出功能 全部实现

需求 : 在react中将表格多样化导出 , 既可以全部导出所有表格数据 , 也可以选择性导出 导出可以选择三种样式 选择了全部 , 不能选其他 全部导出 部分导出 1 导出按钮下拉弹出三种导出格式 <Dropdownmenu{{items: [{label: (<aonClick{() > {setFormat(xlsx)}}>…

零基础编程学python:如何从零开始学习并使用Python编程语言

零基础编程学python&#xff1a;如何从零开始学习并使用Python编程语言 Python是一种非常流行的编程语言&#xff0c;由于其简单的语法和强大的功能&#xff0c;使其成为初学者和专业开发者的首选。无论您是数据科学家、网络开发者还是自动化工程师&#xff0c;Python都能提供必…

Excel利用数据透视表将二维数据转换为一维数据(便于后面的可视化分析)

一维数据&#xff1a;属性值都不可合并&#xff0c;属性值一般在第一列或第一行。 二维数据&#xff1a;行属性或列属性是可以继续合并的&#xff0c;如下数据中行属性可以合并为【月份】 下面利用数据透视表将二维数据转换为一维数据&#xff1a; 1、在原来的数据上插入数据透…

(论文阅读-优化器)Selectivity Estimation using Probabilistic Models

目录 摘要 一、简介 二、单表估计 2.1 条件独立Condition Independence 2.2 贝叶斯网络Bayesian Networks 2.3 查询评估中的贝叶斯网络 三、Join选择性估计 3.1 两表Join 3.2 概率关系模型 3.3 使用PRMs的选择性估计 四、PRM构建 4.1 评分标准 4.2 参数估计 4.3 结…

Adobe Illustrator 2024 for Mac:矢量图形设计软件

Adobe Illustrator 2024 for Mac是一款专为Mac用户设计的行业标准矢量图形设计软件。该软件以其卓越的性能和丰富的功能&#xff0c;为设计师和艺术家们提供了一个全新的创意空间。 作为一款矢量图形软件&#xff0c;Adobe Illustrator 2024 for Mac支持创建高质量的矢量图形&a…

Docker 的网络实现

简介 标准的 Docker 支持以下 4 类网络模式&#xff1a; 1&#xff09;host 模式&#xff1a;使用 --nethost 指定 2&#xff09;container 模式&#xff1a;使用–netcontainer:NAME_or_ID 指定 3&#xff09;none模式&#xff1a;使用 --netnone 指定 4&#xff09;bridge 模…

BEV下统一的多传感器融合框架 - FUTR3D

BEV下统一的多传感器融合框架 - FUTR3D 引言 在自动驾驶汽车或者移动机器人上&#xff0c;通常会配备许多种传感器&#xff0c;比如&#xff1a;光学相机、激光雷达、毫米波雷达等。由于不同传感器的数据形式不同&#xff0c;如RGB图像&#xff0c;点云等&#xff0c;不同模态…

JavaScript注释规范

你好&#xff0c;我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃 &#xff0c;大专生&#xff0c;一枚程序媛&#xff0c;感谢关注。回复 “前端基础题”&#xff0c;可免费获得前端基础 100 题汇总&#xff0c;回复 “前端基础路线”&#xff0c;可获…

基于C++基础知识的循环语句

一、while循环 while循环语句形式如下&#xff1a; while(表达式){语句 } 循环每次都是执行完语句后回到表达式处重新开始判断&#xff0c;重新计算表达式的值&#xff0c;一旦表达式的值为假就退出循环。用花括号括起来的多条简单语句&#xff0c;花括号及其包含的语句被称…

ContEA阅读笔记

Facing Changes: Continual Entity Alignment for Growing Knowledge Graphs 面对变化&#xff1a;不断增长的知识图谱的持续实体对齐 Abstract 实体对齐是知识图谱(KG)集成中一项基本且重要的技术。多年来&#xff0c;实体对齐的研究一直基于知识图谱是静态的假设&#xff…

Day 41 343.整数拆分 96.不同的二叉搜索树

整数拆分 给定一个正整数 n&#xff0c;将其拆分为至少两个正整数的和&#xff0c;并使这些整数的乘积最大化。 返回你可以获得的最大乘积。 示例 1: 输入: 2输出: 1解释: 2 1 1, 1 1 1。 示例 2: 输入: 10输出: 36解释: 10 3 3 4, 3 3 4 36。说明: 你可以假设 …

Java基础教程 - 5 数组

更好的阅读体验&#xff1a;点这里 &#xff08; www.doubibiji.com &#xff09; 更好的阅读体验&#xff1a;点这里 &#xff08; www.doubibiji.com &#xff09; 更好的阅读体验&#xff1a;点这里 &#xff08; www.doubibiji.com &#xff09; 5 数组 前面我们保存数据…

前端基础学习html(1)

1.标题标签.h1,h2...h6 2.段落标签p 换行标签br 3.加粗strong(b) /倾斜em(i) /删除 del(s) /下划线ins(u) 4.盒子&#xff1a;div //一行一个 span//一行多个 5.img :src alt title width height border 图片src引用&#xff1a;相对路径 上级/同级/中级 绝对路径&#xff…

直播话术核心逻辑,学了轻松提高销量!沈阳直播运营培训

直播话术到底该怎么说&#xff1f; 产品话术说得好&#xff0c;直播间一次就能卖出去上万件产品&#xff1b;产品话术说不好&#xff0c;直播间半个月也卖不出去10件产品。 我们上次就有跟大家说过产品话术的具体流程&#xff0c;但发现还有更多朋友居然还是不能够很好地完成一…

2024/5/6 QTday1

自由发挥应用场景&#xff0c;实现登录界面。 要求&#xff1a;尽量每行代码都有注释。 #include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {//窗口相关设置this->resize(350,470);this->setFixedSize(350,470);//窗口标题this-&g…
最新文章