408-数据结构

数据结构在学什么?

1.用代码把问题信息化

2.用计算机处理信息

ch1

数据:数据是信息的载体 ,是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序识别和处理 的符号的集合。数据是计算机程序加工的原料。


ch2

c 复制代码
//假设线性表的元素类型为ElemType,则静态分配的顺序表存储结构描述为
#define MaxSize 50				//定义线性表的最大长度
typedef struct {
	ElemType data[MaxSize];		//顺序表的元素
	int length;					//顺序表的当前长度
}SqList;						//顺序表的类型定义

//动态分配的顺序表存储结构描述为
#define InitSize 100			//表长度的初始定义
typedef struct {
	ElemType* data;				//指示动态分配数组的指针
	int MaxSize, length;		//顺序表的最大容量和当前个数
}SeqList;						//动态分配数组顺序表的类型定义
//C的初始动态分配语句为
L.data = (ElemType*)malloc(sizeof(ElemType) * InitSize);
//C++的初始动态分配语句为
L.data = new ElemType[InitSize];
cpp 复制代码
#define MaxSize 50
//静态分配的顺序表,定义一个数组,它包括数据类型和数据长度
typedef struct {
	int data[MaxSize];
	int length;				//表示数据表的当前长度
}SqList;

//基本操作------初始化一个顺序表
void InitList(SqList& L) {
	//for (int i = 0; i < MaxSize; i++)
	//	L.data[i] = 0;
	L.length = 0;
}
int main() {
	SqList L;
	InitList(L);
	//尝试"违规"打印整个data数组
	for (int i = 0; i < MaxSize; i++)//i < L.length
		printf("data[%d] = %d ", i, L.data[i]);
	return 0;
}
cpp 复制代码
#define InitSize 10
//动态分配的顺序表,定义一个指针,它包括数据类型,但需要分配数据长度
typedef struct {
	int* data;
	int MaxSize, length;	//表示数据表的最大长度和当前长度
}SqList;

void InitList(SqList& L) {
	L.data = (int*)malloc(sizeof(int) * InitSize); //开辟内存空间
	L.MaxSize = InitSize;
	L.length = 0;
}

void IncreaseSize(SqList& L, int len) {
	int* p = L.data;		//临时变量p暂存L.data的内容
	L.data = (int*)malloc(sizeof(int) * (L.MaxSize + len)); //开辟新的内存空间
	for (int i = 0; i < L.length; i++) {
		L.data[i] = p[i];	//暂存的的内容还给L.data
	}
	free(p);				//释放p的内存空间
}

int main() {
	SqList L;
	InitList(L);
	IncreaseSize(L, 5);

	return 0;
}
cpp 复制代码
bool ListInsert(SqList& L, int i, int e) {//在第i个位置插入元素e,下标为i-1
	if (i<1 || i> L.length + 1 || L.length == MaxSize) {
		return false;
	}
	for (int j = L.length; j >= i; j--) {
		L.data[j] = L.data[j - 1];
	}
	L.data[i - 1] = e;
	L.length++;
	return true;
}

bool ListDelete(SqList& L, int i, int& e) {
	if (i<1 || i>L.length) {
		return false;
	}
	e = L.data[i - 1];
	for (int j = i; j < L.length - 1; j++) {//下标为i-1的元素不要,从i开始逐个前移
		L.data[j - 1] = L.data[j];
	}
	L.length--;
	return true;
}

int GetElem(SqList L, int i) {
	return L.data[i - 1];
}

int LocateElem(SqList L, int e){
	for (int i = 0; i < L.length; i++) {
		if (L.data[i] == e)
			return i + 1;				//返回的是位序,不是下标
	}
	return 0;
}
相关推荐
稚南城才子,乌衣巷风流25 分钟前
动态树(Dynamic Tree)数据结构详解
数据结构·算法
zander2581 小时前
114. 二叉树展开为链表
数据结构·链表·深度优先
小肝一下2 小时前
3. 单链表
c语言·数据结构·c++·算法·leetcode·链表·dijkstra
tachibana22 小时前
hot100 前 K 个高频元素(347)
java·数据结构·算法·leetcode
延凡科技15 小时前
多场景落地复盘:端边云架构无人机智能巡检系统设计与实践
大数据·数据结构·人工智能·科技·架构·无人机·能源
皓月斯语21 小时前
B3842 [GESP202306 三级] 春游 题解
数据结构·c++·算法·题解
春日见21 小时前
算法与数据结构----哈希表
数据结构·人工智能·算法·机器学习·自动驾驶·哈希算法·散列表
萌动的小火苗1 天前
嵌入式开发中的栈与队列:任务调度为什么依赖数据结构
数据结构·c++·单片机·嵌入式硬件
叩码以求索1 天前
统计按位或能得到最大值的子集数目(一)
数据结构·算法
tachibana21 天前
hot100 数组中的第K个最大元素(215)
java·数据结构·算法·leetcode