数据结构与算法-顺序表

数据结构与算法

  • 🎈1.线性表
    • 🔎1.1基本操作
    • 🔎1.2线性表的存储结构
  • 🎈2.线性表的顺序表示和实现
    • 🔎2.1线性表的顺序存储表示
      • 🔭2.1.1静态顺序表
      • 🔭2.1.2动态顺序表
    • 🔎2.2顺序表基本操作的实现
      • 📖2.2.1线性表顺序存储的类定义
      • 📖2.2.2顺序表的初始化
      • 📖2.2.3销毁顺序表
      • 📖2.2.4查找操作
      • 📖2.2.5插入操作
      • 📖2.2.6删除操作
      • 📖2.2.7倒置操作
      • 📖2.2.8合并操作
      • 📖2.2.9打印操作
      • 📖2.2.10全部代码

🎈1.线性表

线性表是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串…
线性表在逻辑上是线性结构,也就是说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理存储时,通常以数组和链式结构的形式存储。

在这里插入图片描述

🔎1.1基本操作

//构造一个空的线性表
InitList(&L)//初始条件:线性表L已经存在
//操作结果:销毁线性表L
DestroyList(&L)//初始条件:线性表L已经存在
//操作结果:将线性表L置为空表
ClearList(&L)//初始条件:线性表L已经存在
//操作结果:若线性表L为空表,则返回TURE,否则返回FALSE
ListEmpty(L)//初始条件:线性表L已经存在
//操作结果:返回线性表L中的数据元素个数
ListLength(L)//初始条件:线性表L已经存在,1<=i<=ListLength(L)
//操作结果:用e返回线性表L中的第i个数据元素的值
GetElem(L,i,&e)//初始条件:线性表L已经存在,compare()是数据元素判定函数
//操作结果:返回L中第1个与e满足compare()的数据元素的位序。若这样的数据元素不存在则返回值为0.
LocateElem(L,e,compare())//初始条件:线性表L已经存在
//操作结果:若cur_e是L的数据元素,且不是第一个,则用pre_e返回它的前驱,否则操作失败,pre_e无意义
PriorElem(L,cue_e,&pre_e)//初始条件:线性表L已经存在
//操作结果:若cur_e是L的数据元素,且不是最后一个,则用next_e返回它的后继,否则操作失败,next_e无意义
NextElem(L,cue_e,&next_e)//初始条件:线性表L已经存在,1<=i<=ListLength(L)
//操作结果:在L的第i个位置之前插入新的元素e,L的长度+1
ListInsert(&L,i,e)//初始条件:线性表L已经存在,1<=i<=ListLength(L)
//操作结果:删除L的第i个数据元素,并用e返回其值,L的长度-1
ListDelete(&L,i,&e)//初始条件:线性表L已经存在
//操作结果: 依次对线性表中每个元素调用visited()
ListTraverse(&L,visited())

🔎1.2线性表的存储结构

在计算机内,线性表有两种基本的存储结构:顺序存储结构和链式存储结构

🎈2.线性表的顺序表示和实现

线性表的顺序表示又称顺序存储结构或顺序映像。

🔎2.1线性表的顺序存储表示

顺序存储定义:把逻辑上相邻的数据元素存储在物理上相邻的存储单元中的存储结构。

在这里插入图片描述线性表的第1个数据元素a1的存储位置,称为线性表的起始位置或基地址。

注:线性表的顺序存储结构占用一片连续的存储空间,知道某个元素的存储位置就可以计算其他元素的存储位置。

📖假设线性表的每个元素需占l和存储单元,那么第i+1个元素的存储位置和第i个元素的存储位置之间满足关系:Loc(ai+1)=Loc(ai)+l.
由此,所有数据元素的存储位置均可由第一个数据元素是存储位置得到:Loc(ai)=Loc(a1)+(i-1)*l,这里的Loc(a1)称为基地址。

🏆通过上面的学习,我们发现顺序表中元素具有以下特点:地址连续,依次存放,随机存取,类型相同。这些让我们想到了一维数组,但是我们也发现了线性表的长可变(存在插入和删除操作),而数组长度不可动态定义。因此,我们需要用一个变量表示顺序表的长度属性。

#define List_Init_Size 100//线性表存储空间的初始分配量
typedef struct
{ElemType elem[List_Init_Size];int length;//当前长度
}SqList;

🔎顺序表一般可以分为:

  1. 静态顺序表:使用定长数组存储元素
  2. 动态顺序表:使用动态开辟的数组存储

🔭2.1.1静态顺序表

//顺序表的静态存储
#define N 1000
typedef double SLDataType;
typedef struct SeqList
{SLDataType arr[N];//定长数组int size;//有效数据的个数//表示数组中存储了多少个数据
}SL;

在这里插入图片描述

🔭2.1.2动态顺序表

//顺序表的动态存储
typedef struct SeqList
{SLDataType* arr;//指向动态开辟的数组int size;//表示数组中存储了多少个数据int capacity;//数组实际能存数据的空间容量是多大
}SL;
SL L;
L.arr = (SLDataType*)malloc(sizeof(SLDataType)*MaxSize);

在这里插入图片描述
🔎补充:C语言的内存动态分配

  • malloc(m)函数:开辟m字节长度的地址空间,并返回这段空间的首地址。
  • sizeof(x)运算:计算变量x的长度
  • free (p)函数:释放指针p所指向变量的存储空间,即彻底删除一个变量。

注:需要添加头文件#include <stdlib.h>!

🔎补充:C++的内存动态分配

new 类型名T (初值列表)
//功能:申请用于存放T类型对象的内存空间,并依初值列表赋以初值
//结果值:
//成功:T类型的指针,指向新分配的内存
//失败:0(NULL)
int *p1 = new int;
//或者: int *p1 = new int(10);delete 指针p
//功能:释放指针p所指向的内存,p必须是new操作的返回值。
delete p1;

🔎补充:C++中的参数传递

  • 函数调用时传送给形参表的实参必须与形参三个一致:类型、个数、顺序
  • 参数传递有两种方式:传值(参数为整型、实型、字符型)以及传址(参数为指针变量、引用类型、数组名)

在这里插入图片描述

🔎2.2顺序表基本操作的实现

//初始化操作,建立一个空的线性表L
InitList(&L)//摧毁已存在的线性表L
DestroyList(&L)//将线性表清空
ClearList(&L)//在线性表L中第i个位置插入新元素e
ListInsert(&L,i,e)//删除线性表L中第i个位置元素,用e返回
ListDelete(&L,i,&e)//若线性表为空,返回1,否则返回0
ListEmpty(L)//返回线性表L的元素个数
ListLength(L)//L中查找与给定值e相等的元素,若成功返回该元素在表中的序号,否则返回0
LocateElem(L,e)//将线性表L中的第i个位置元素返回给e
GetElem(L,i,&e)

📖2.2.1线性表顺序存储的类定义

#define initlistsize 100
#define increment 10
class Sqlist
{
private:ElemType* elem;int listsize;int length;
public:Sqlist();//构造函数,初始化顺序表,建立一个空表~Sqlist();//析构函数,销毁一个顺序表void InitList(int n);//创建n个元素的空表int LocateList(ElemType x);//查找值等于x的结点,若存在返回下标,否则返回-1void InsertList(int pos, ElemType e);//在顺序表的第pos位置上插入元素evoid DeleteList(int pos, ElemType& e);//删除第pos位置上的元素,且把值赋给evoid TurnList();//顺序表的倒置void MergeList(Sqlist& la, Sqlist& lb);//两个顺序表合并void print();//打印顺序表
};

📖2.2.2顺序表的初始化

Sqlist::Sqlist()//构造函数,创建一个长度为0,容量为initlistsize的空表
{elem = new ElemType[initlistsize];//申请大小为inilistsize的空表listsize = initlistsize;//设置当前顺序表空间大小length = 0;//设置当前顺序表的元素个数为0
}

该算法中无循环语句,算法的时间复杂度为O(1).

📖2.2.3销毁顺序表

Sqlist::~Sqlist()
{delete[]elem;//释放顺序表所占有的存储空间listsize = 0;length = 0;
}

该算法中无循环语句,算法的时间复杂度为O(1).

📖2.2.4查找操作

在顺序表中查找第一个值等于x的元素,找到后返回该元素的下标。若元素不存在,则返回-1.

int Sqlist::LocateList(ElemType x)
{int i = 0;for (i = 0; i < length; i++){if (x == elem[i])return i;return -1;}
}

本算法中存在for循环,时间复杂度为O(length).

📖2.2.5插入操作

该基本操作是在顺序表第pos(1<=pos<=length+1)个位置上插入新元素e,若pos位置不正确,则出错处理;若当前存储空间已满时,需重新申请新空间,并作相应处理;否则将顺序表原来第pos个元素开始后移一个位置。移动顺序从右向左,腾出一个位置插入新元素,最后顺序表元素个数+1,具体图示如下:
在这里插入图片描述

void Sqlist::InsertList(int pos, ElemType e)
{if (pos<1 || pos>length + 1)//pos位置不正确,则出错处理return;if (length >= listsize){ElemType *elem1 = new ElemType[initlistsize + increment];//顺序表已满,申请新空间int i = 0;for (i = 0; i < length; i++){elem1[i] = elem[i];//复制元素}delete[]elem;//释放旧空间elem = elem1;listsize += increment;//调整顺序表空间大小}ElemType* p = &elem[pos - 1];//注意这里的取地址ElemType* q = &elem[length - 1];for (; p <= q; q--)//从右往左移{*(q + 1) = *q;}*p = e;//插入元素length++;//长度+1
}

本算法的时间复杂度主要处决于元素的移动次数,假设该顺序表共有n个元素,当我们要插入的位置是第一个,那么我们需要移动n次;当我们插入的位置为n+1时,那么需要移动的次数是0次。此时时间复杂度为O(n).

📖2.2.6删除操作

该基本操作是在顺序表中删除第pos(1<=pos<=length)位置上的数据元素,并把值赋给e。若pos位置不正确,则出错处理;否则将顺序表第pos个元素之后的所有元素向前移动一个位置。移动顺序为从左往右,最后顺序表元素个数-1,删除顺序表的变化过程如下图所示:
在这里插入图片描述

void Sqlist::DeleteList(int pos, ElemType& e)
{if (pos<1 || pos>length)//删除位置不合理,出错处理return;ElemType* p = &elem[pos - 1];//注意这里的取地址ElemType* q = &elem[length - 1];e = *p;//把删去的元素的值赋给efor (; p < q; p++)//从左往右移{*p = *(p+1);}length--;//长度-1
}

本算法的时间复杂度主要处决于元素的移动次数,假设该顺序表共有n个元素,当我们要删除的位置是第一个,那么我们需要移动n-1次;当我们删除的位置为n时,那么需要移动的次数是0次。因此时间复杂度为O(n).

📖2.2.7倒置操作

该基本操作是顺序表的倒置,基本思想是第1个数据元素与最后一个数据元素进行交换,第2个数据元素与最后第2个元素交换,以此类推,直到所有元素交换完为止。

void Sqlist::TurnList()
{ElemType* p = elem;ElemType* q = &elem[length - 1];ElemType* temp = new ElemType;for (; p < q; p++, q--){*temp = *p;*p = *q;*q = *temp;}
}

本算法时间复杂度为O(n).

📖2.2.8合并操作

已知2个顺序表la和lb按值非递减有序排列,把这两个顺序表合并成一个新的顺序表lc,且lc中元素仍然按值非递减排列(注:lc中元素存放在私有成员elem指向的存储空间中。)

void Sqlist::MergeList(Sqlist& la, Sqlist& lb)
{length = la.length + lb.length;ElemType* pa = la.elem, * pa_last = &elem[la.length - 1];ElemType* pb = lb.elem, * pb_last = &elem[lb.length - 1];ElemType* pc = elem;while (pa <= pa_last && pb <= pb_last)//按值非递减合并la和lb{if (*pa <= *pb){*pc++ = *pa++;}else{*pc++ = *pb++;}}while (pb <= pb_last)//合并顺序表lb的剩余元素{*pc++ = *pb++;}while (pa <= pa_last)//合并顺序表la的剩余元素{*pc++ = *pa++;}
}

📖2.2.9打印操作

void Sqlist::print()
{int i = 0;for (i = 0; i < length; i++){cout << elem[i] << " ";}cout << endl;
}

本算法时间复杂度为O(length).

📖2.2.10全部代码

#include <iostream>
using namespace std;
#define initlistsize 100
#define increment 10
typedef int ElemType;
class Sqlist
{
private:ElemType* elem;int listsize;int length;
public:Sqlist();//构造函数,初始化顺序表,建立一个空表~Sqlist();//析构函数,销毁一个顺序表void InitList(int n);//创建n个元素的空表int LocateList(ElemType x);//查找值等于x的结点,若存在返回下标,否则返回-1void InsertList(int pos, ElemType e);//在顺序表的第pos位置上插入元素evoid DeleteList(int pos);//删除第pos位置上的元素,且把值赋给evoid TurnList();//顺序表的倒置void MergeList(Sqlist &la, Sqlist &lb);//两个顺序表合并void print();//打印顺序表
};
Sqlist::Sqlist()//构造函数,创建一个长度为0,容量为initlistsize的空表
{elem = new ElemType[initlistsize];//申请大小为inilistsize的空表listsize = initlistsize;//设置当前顺序表空间大小length = 0;//设置当前顺序表的元素个数为0
}
Sqlist::~Sqlist()
{delete[]elem;//释放顺序表所占有的存储空间listsize = 0;length = 0;
}
void Sqlist::InitList(int n)
{length = n;int i = 0;for (i = 0; i < n; i++){cin >> elem[i];}
}
int Sqlist::LocateList(ElemType x)
{cout << "查找" << x << "所在位置" << endl;int i = 0;for (i = 0; i < length; i++){if (x == elem[i])cout << "找到了,是第" << i + 1 << "个元素" << endl;}return -1;
}
void Sqlist::InsertList(int pos, ElemType e)
{if (pos<1 || pos>length + 1)return;if (length >= listsize){ElemType *elem1 = new ElemType[initlistsize + increment];//顺序表已满,申请新空间int i = 0;for (i = 0; i < length; i++){elem1[i] = elem[i];//复制元素}delete[]elem;//释放旧空间elem = elem1;listsize += increment;//调整顺序表空间大小}ElemType* p = &elem[pos - 1];//注意这里的取地址ElemType* q = &elem[length - 1];for (; p <= q; q--)//从右往左移{*(q + 1) = *q;}*p = e;//插入元素length++;//长度+1
}
void Sqlist::DeleteList(int pos)
{ElemType* e = new ElemType;if (pos<1 || pos>length)//删除位置不合理,出错处理return;ElemType* p = &elem[pos - 1];//注意这里的取地址ElemType* q = &elem[length - 1];*e = *p;//把删去的元素的值赋给efor (; p < q; p++)//从左往右移{*p = *(p+1);}length--;//长度-1cout << "删除的元素是" << *e<<endl;
}
void Sqlist::TurnList()
{ElemType* p = elem;ElemType* q = &elem[length - 1];ElemType* temp = new ElemType;for (; p < q; p++, q--){*temp = *p;*p = *q;*q = *temp;}
}
void Sqlist::MergeList(Sqlist &la, Sqlist &lb)
{length = la.length + lb.length;ElemType* pa = la.elem, * pa_last = &la.elem[la.length - 1];ElemType* pb = lb.elem, * pb_last = &lb.elem[lb.length - 1];ElemType* pc = elem;while (pa <= pa_last && pb <= pb_last)//按值非递减合并la和lb{if (*pa <= *pb){*pc++ = *pa++;}else{*pc++ = *pb++;}}while (pb <= pb_last)//合并顺序表lb的剩余元素{*pc++ = *pb++;}while (pa <= pa_last)//合并顺序表la的剩余元素{*pc++ = *pa++;}int i = 0;for (i = 0; i < length; i++){cout << elem[i] << " ";}
}
void Sqlist::print()
{int i = 0;for (i = 0; i < length; i++){cout << elem[i] << " ";}cout << endl;
}
int main()
{Sqlist L,la,lb,lc;L.InitList(10);L.print();L.LocateList(5);cout << "倒置前:";L.print();L.TurnList();cout << "倒置后:";L.print();L.InsertList(5, 9);cout << "在下标为5的位置插入9后:";L.print();L.DeleteList(3);cout << "删除第3个元素后:";L.print();cout << "线性表la的元素为:";la.InitList(5);cout << "线性表lb的元素为:";lb.InitList(5);cout << "合并后的线性表为:";lc.MergeList(la, lb);return 0;}

✅ 运行示例:
在这里插入图片描述

好啦,关于顺序表的知识点到这里就结束啦,后期会继续更新数据结构与算法的相关知识,欢迎大家持续关注、点赞和评论!❤️❤️❤️

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

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

相关文章

安卓:解决AndroidStudio导出Unity的Apk(APP)出现2个显示图标

用AndroidStudio打开该项目 实现只保留1个app图标 AndroidManifest.xml的改法如下&#xff1a; <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android" package"com.fru…

【开发篇】十四、SpringBoot整合Quartz实现定时任务

文章目录 1、关于定时任务2、Java原生实现3、相关名词4、SpringBoot整合Quartz5、Quartz的通用配置6、关于QuartzJobBean7、关于调度器Scheduler的绑定8、Quartz持久化 1、关于定时任务 定时任务在实际开发中使用场景很多&#xff0c;比如&#xff1a; 年度报告各种统计报告某…

【小程序 - 加强】自定义组件、使用npm包、全局数据共享、分包_05

目录 一、自定义组件 1. 组件的创建与引用 1.1 创建组件 1.2 引用组件 1.2.1 局部引用组件 1.2.2 全局引用组件 1.2.3 全局引用 VS 局部引用 1.2.4 组件和页面的区别 2. 样式 2.1 组件样式隔离 2.2 组件样式隔离的注意点 2.3 修改组件的样式隔离选项 2.4 styleIso…

C++(List)

本节目标&#xff1a; 1.list介绍及使用 2.list深度剖析及模拟实现 3.list和vector对比 1.list介绍及使用 1.1list介绍 1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。 2. list的底层是双向链表结构&#xff0c;…

内网综合扫描工具-fscan的安装和使用

简介 一款内网综合扫描工具&#xff0c;方便一键自动化、全方位漏扫扫描。 支持主机存活探测、端口扫描、常见服务的爆破、ms17010、redis批量写公钥、计划任务反弹shell、读取win网卡信息、web指纹识别、web漏洞扫描、netbios探测、域控识别等功能。相当强大&#xff01;&…

国庆10.04

服务器 代码 头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QTcpServer> //服务器头文件 #include<QTcpSocket> //客户端头文件 #include<QList> //链表容器 #include<QMessag…

OpenCV(Python)的二值化示例

# -*-coding:utf-8-*- # src&#xff1a; 输入图&#xff0c;只能输入单通道图像&#xff0c;通常来说为灰度图 # - dst&#xff1a; 输出图 # - thresh&#xff1a; 阈值 # - maxval&#xff1a; 当像素值超过了阈值&#xff08;或者小于阈值&#xff0c;根据type来决定&#…

【重拾C语言】二、顺序程序设计(基本符号、数据、语句、表达式、顺序控制结构、数据类型、输入/输出操作)

目录 前言 二、顺序程序设计 2.1 求绿化带面积——简单程序 2.2基本符号&#xff1a; 2.2.1 字符集 可视字符 不可视字符 2.2.2 C特定符 关键字 分隔符 运算符 2.2.3 标识符 2.2.4 间隔符 2.2.5 注释 2.3 数据 2.3.1 字面常量&#xff08;Literal Constants&am…

扫雷小游戏(简单详细)(内附完整代码)

设计总体思路 实现游戏可以一直玩&#xff0c;先打印棋盘&#xff0c;玩家和电脑下棋&#xff0c;最后分出胜负。 如果编写较大的程序&#xff0c;我们可以分不同模块 例如这个扫雷&#xff0c;我们可以创建三个文件 分别为&#xff1a; game.h 函数的声明game.c 函数的…

MySQL数据库基础回顾与复习

MySQL数据库 一、原理定义概念 定义 数据库(Database)是按照数据结构来组织、存储和管理数据的建立在计算机存储设备上的仓库 数据库是长期储存在计算机内、有组织的、可共享的数据集合 分类&#xff1a; &#xff08;1&#xff09;非结构化数据&#xff1a; 数据相对来讲没…

微软输入法如何打勾和箭头的符号

文章目录 一、打 “√” 符号二、打 “←” 和 “→” 符号 一、打 “√” 符号 选中 “表情包” 图标 选中 “Ω” 符号后&#xff0c;下拉找到 “√” 即可。 微软输入法打 “ ”这个符号直接输入拼音“cha”就行。 二、打 “←” 和 “→” 符号 拼音直接打 “zuo” 或 “…

苹果ios系统IPA包企业签名手机下载应用可以有几种方式可以下载到手机?

一、App Store签名&#xff1a;这是最常见和推荐的苹果签名方式。用户可以通过苹果的官方应用商店App Store下载并安装经过苹果审核的应用程序。这种签名方式确保了应用程序的安全性和可靠性&#xff0c;因为App Store对应用进行了严格的审核和验证。 二、企业签名&#xff1a;…

【Kafka专题】Kafka集群架构设计原理详解

目录 前言前置知识课程内容一、Kafka的Zookeeper元数据梳理1.1 zookeeper整体数据1.2 Controller Broker选举机制1.3 Leader Partition选举机制1.4 Leader Partition自动平衡机制*1.5 Partition故障恢复机制1.6 HW一致性保障-Epoch更新机制1.7 总结 学习总结感谢 前言 Kafka的…

【VUE复习·9】v-for 基础用法(循环渲染也叫列表渲染)

总览 1.v-for 都能循环什么 2.用法 一、v-for 都能遍历什么 能循环的东西包括&#xff1a;数组、对象、字符串&#xff08;和java里面的3个引用数据类型一样&#xff09;、纯粹循环数量&#xff08;少用&#xff09; 二、用法 1.用法1&#xff1a;简单循环&#xff08;遍历…

扩散模型diffusion model 代码解读

代码来自这里 使用pytorch轻松实现简单扩散模型diffusion model&#xff08;附可跑通全部代码&#xff09; - 知乎 1.作者首先自己定义了一个数据集&#xff0c;也就是一堆散点&#xff0c;组成的S。 2.这些都是预先设置好的参数&#xff0c;也就是利用这些来做learning的提示…

【OLSR路由协议】链路状态路由(OLSR)协议中选择多点中继节点算法研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Flink--7、窗口(窗口的概念、分类、API、分配器、窗口函数)、触发器、移除器

星光下的赶路人star的个人主页 内心的平静始于不再让他人掌控你的感情 文章目录 0、前言1、窗口&#xff08;Window&#xff09;1.1 窗口的概念1.2 窗口的分类1.3 窗口API概览1.4 窗口分配器&#xff08;Window Assigner&#xff09;1.4.1 时间窗口1.4.2 计数窗口 1.5 窗口函数…

【Linux基础】Linux云服务器(腾讯云、阿里云、华为云)环境部署 | 安装远程XShell | 基本账号管理(超详细教程)

&#x1f449; 系列专栏&#xff1a;【LLinux基础】 &#x1f648; 个人主页&#xff1a;sunnyll 目录 一、前言 二、 Linux环境安装 &#x1f4a6; Linux 环境的搭建方式 &#x1f4a6;如何购买云服务器 三、 安装远程控制XShell &#x1f4a6;下载 XShell &#x1f4…

[linux] SFTP文件传输基本命令 --- xshell 直接上传文件

2.sftp - 上传文件&#xff1a;如果上传/下载的是文件夹, 在put/get命令后加上-r参数即可。 上传文件&#xff1a; 把本地服务器的/www/wwwroot目录下面的study.log文件上传到远程服务器的/www/server目录下。 sftp> lcd /www/wwwroot sftp> put study.log /www/server…

c++中的动态内存管理

目录 1.内存分布 2.c语言动态内存管理 3.c动态内存管理 4.operator new 与operator delete 函数 5.定位new 6.malloc/free 与 new/delete 的区别 1.内存分布 首先我们需要了解一下数据在内存中的分布&#xff0c;请看以下代码&#xff1a; int globalVar 1; static in…