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;
}
相关推荐
tobias.b3 小时前
计算机基础知识-数据结构
java·数据结构·考研
不想看见4045 小时前
Valid Parentheses栈和队列--力扣101算法题解笔记
开发语言·数据结构·c++
计算机安禾5 小时前
【C语言程序设计】第37篇:链表数据结构(一):单向链表的实现
c语言·开发语言·数据结构·c++·算法·链表·蓝桥杯
皮卡狮6 小时前
高阶数据结构:AVL树
数据结构·算法
不要秃头的小孩7 小时前
50. 随机数排序
数据结构·python·算法
故事和你917 小时前
sdut-python-实验四-python序列结构(21-27)
大数据·开发语言·数据结构·python·算法
丶小鱼丶8 小时前
数据结构和算法之【栈】
java·数据结构
不要秃头的小孩8 小时前
力扣刷题——111.二叉树的最小深度
数据结构·python·算法·leetcode
散峰而望8 小时前
【基础算法】从入门到实战:递归型枚举与回溯剪枝,暴力搜索的初级优化指南
数据结构·c++·后端·算法·机器学习·github·剪枝
elseif12310 小时前
CSP-S提高级大纲
开发语言·数据结构·c++·笔记·算法·大纲·考纲