数据结构与算法基础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 引入

  1. 一元多项式实现
  2. 稀疏多项式的运算
  3. 图书信息管理系统

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开始
posted @ 2025-06-20 23:54  鲲特牌  阅读(5)  评论(0)    收藏  举报