数据结构与算法基础2
基本没怎么看, 就补充了下cpp的语法. 感觉伪代码看起来好麻烦. 写出来还得改改. 不如全部看完自己写出来. 等明后天吧. 直接把线性表看完. 看看能写出来几个.
C语言补充
// 伪代码
// 结构体定义
typedef <数据类型> struct {
<数据类型> <数据名>;
ElemType data[];
int length;
} SqList, <结构体名称>;
// 静态分配数组
typedef struct {
ElemType data[];
int length;
} SqList;
// 动态分配数组
// #include <stdlib.h>
SqList L;
L.data = (ElemType*) malloc (sizeof(ElemType) * MaxSize);
// malloc(x) 创建 x 长度的地址空间, 并返回空间的首地址
// sizeof(x) 计算 x 的长度
// free(p) 释放指针变量 p 占用的存储空间
typedef struct {
ElemType *data;
int length;
} SqList;
// 类似 malloc 更简便
// new 申请用于存放 <类型名> 对象的内存空间, 并赋 初值
new <类型名> (初值)
int *p = new int(10);
// 类似 free 释放指针p指向的内存
delete <指针p>
// 形参(值)传递
#include <iostream>
using namespace std;
int func(int x)
{
x = 1;
cout << "x = " << x << endl;
}
int main()
{
int x = 0;
cout << "x = " << x << endl;
func(x);
cout << "x = " << x << endl;
return 0;
}
// 指针传递
// & 取地址
// * 调用
// &x 取 指针变量 x 的内存地址
// *x 获取指针变量 x 的值
#include <iostream>
using namespace std;
void func(int *x)
{
*x = 10;
cout << "x = " << *x << endl;
}
int main()
{
int x = 0;
cout << "x = " << x << endl;
func(&x);
cout << "point x = " << &x << endl;
cout << "x = " << *x << endl;
return 0;
}
// 引用传递
// x 的地址复制给了 形参 func &x
// 使得 func 函数可以操作主函数中 变量x 的值
#include<iostream>
using namespace std;
func(int &x)
{
x = 110;
cout << "x = " << x << endl;
}
int main()
{
int x = 0;
cout << "x = " << x << endl;
func(x);
cout << "x = " << x << endl;
return 0;
}
第二章 线性表
2.1 线性表的定义和特点
线性表是具有相同特性的数据元素的一个有限序列
a1, a2, ... , an
a1 线性起点(起始结点) 只有后继结点
an 线性终点(重点结点) 只有前驱结点
其余节点有且仅有一个前驱和一个后继结点
当 n = 0 空表
- 线性表 Linear List
- 由 n 个 a1, a2, ... ,an 数据元素组成的有限序列
- n 为表的长度
- n = 0 为空表
同一线性表中元素必定具有相同特性, 数据元素间的关系是线性关系.
2.2 引入
- 一元多项式实现
- 稀疏多项式的运算
- 图书信息管理系统
2.3 线性的类型定义
- 线性表初始化定义
- 新建线性表
- 销毁线性表
- 清空线性表内元素
- 判断线性表空
- 检索线性表长度
- 取线性表内元素
- 定位线性表内元素
- 查找线性表内元素的前驱结点
- 查找线性表内元素的后继结点
- 表内插入元素
- 删除表内元素
- 遍历线性表内元素
2.4 线性表的顺序表示和实现
2.4.1 线性表的顺序存储表示
线性表的顺序表示 顺序存储结构或顺序映像
- 定义: 逻辑上相邻的数据元素存储在物理上相邻的存储元素的存储结构.
线性表的第1个数据元素的存储位置, 称为线性表的 起始位置 也叫 基地址.
-
线性表存储占用一片连续的存储空间, 只要知道某个元素的存储位置, 就可以计算其他元素的存储位置.
-
元素占用的存储单元 = 前驱结点的存储位置 + 元素占用的存储单元
-
Locate(ai) = Locate(a1) + (i -1) × length
-
特点
- 物理位置相邻表示逻辑关系, 任一元素均可随机存取
-
顺序表 -> 一维数组
- 地址连续
- 依次存放
- 随机存取
- 类型相同
// 伪代码
#define List_INIT_SIZE 100
typedef struct
{
ElemType elem[LIST_INIT_SIZE];
int length;
} SqlList;
- 顺序表
- 逻辑位序与物理位序差1: 数组第一个元素的下标从0开始