IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 数据结构代码合集 -> 正文阅读

[数据结构与算法]数据结构代码合集


作者考研自用,每天都会有相应的更新,欢迎参考,有问题可以帮忙提出,一起加油!

线性表

基本操作

线性表的主要操作如下:

不同存储类型的结构

顺序表

//静态分配
#define MaxSize 50
typedef struct{
	ElemType data[MaxSize];
	int length;
}SqList; 
//动态分配
#define InitSize 100
typedef struct{
	ElemType *data;
	int MaxSize,length;
}SeqList; 

InitList(&L):初始化表

初始化表,构造一个空的线性表
顺序表

//静态初始化
void InitList(SqList &L){
	L.length=0;
} 
//动态初始化
void InitList(SeqList &L){
	L.data=(ElemType*)malloc(InitSize*sizeof(ElemType));
	L.length=0;
	L.MaxSize=InitSize;
} 

Length(L):求表长

顺序表
返回线性表L的长度,即L中数据元素的个数

//Length(L)
//静态 
int Length(SqList L){
	return L.length;
}
//动态
int Length(SeqList L){/
	return L.length;
} 

LocateElem(L,e):按值查找操作

在表L中查找具有给定关键字值的元素
顺序表

//动态和静态相同,以静态为例,区别在于结构名不同 
int LocateElem(SqList L,int e){//按值查找
	for(int i = 0;i < L.length;i++){
		if(L.data[i] == e){
			return i+1;//下标为i等于e时,返回位序为i+1 
		}
	}
	return -1;//查找失败的返回值 
}

平均时间复杂度为:O(n)

GetElem(L,i):按位查找操作

获取表L中第i个位置的元素的值
顺序表

int getElem(SqList L,int p,int &e){
	if(p<0||p>=L.length){//判断是否超过长度
		return 0;
	}
	e=L.data[p];//获取值
	return 1;
}

ListInsert(&L,i,e):插入操作

在表L中第i个位置上插入指定元素e
顺序表

bool ListInsert(SqList &L,int i,ElemType e){
	if(i<0||i>L.length+1)
		return false;
	if(L.length>=MaxSize)
		return false;
	for(int j=L.length;j>=i;j--)//把结点i及后面的结点后移一格 
		L.data[j]=L.data[j-1];
	L.data[i-1]=e;//在i-1处插入值 
	L.length++;//记得插入后需要+1 
	return true; 
}

平均时间复杂度为O(n)

ListDelete(&L,i,&e):删除操作

bool ListDelete(Sqlist &L, int p, ElemType &e){
	if (p<0||p>= L.length) {
		return false;
	}
	e = L.data[p];
	for (int i = p; i < L.length-1; i++) {
	L.data[i] = L.data[i+1];
	}
	--(L.length); 
	return true;
}

时间复杂度为O(n)

PrintList(L):输出操作

按前后顺序输出线性表L的所有元素值

void PrintList(SqList L){//打印操作 
	for(int i = 0;i < L.length;i++){
		printf("%d",L.data[i]);
	}
}

Empty(L):判空操作

bool Empty(SqList L){//判空操作 
	if(L.length==0) return true;//证明是空的
	return false; 
} 

DestroyList(&L):销毁操作

顺序表
这是动态特有的,静态形式会自动回收

void DestroyList(SeqList &L){//销毁操作 
	if(L.data){
		free(L.data);
		L.data = NULL;//释放L.data指针本身
		L.length = 0;
		L.MaxSize = 0;
	}
}
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-08-25 12:27:44  更:2021-08-25 12:28:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 22:57:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码