(一)线性表

  • 线性表定义

    相同类型的n个数据元素的有限序列

  • 基本操作
    CRUD

  • 顺序表和链表的特点
    顺序表:查找快,插入和删除效率低
    链表:与顺序表相反。

  • 顺序线性表

//静态分配
typedef struct List {ElemType data[50];int length;
} SqList;#define InitSize 50
//动态分配
typedef struct List {ElemType *data;int length;
} SqList;
L.data = (ElemType*)malloc(sizeof(ElemType)*InitSize);
  • 顺序表CRUD的实现
  • 单链表结构

typedef struct LNode {ElemType data;LNode *next;
} LNode, *LinkList;

如果没有 typedef 上面的变量就要这样声明:struct LNode node;

  • 结构体变量和结构体指针区别
    1. 结构体变量 LNode 只能通过 . 访问成员;
    2. 结构体指针 *LinkList 可以通过 -> 访问成员;

  • 单链表建立

  1. 头插法建立单链表

    构建的顺序与输入相反,如输入12345,构建成54321

typedef struct Node {int data;Node *next;
} *LinkList;
void headInsert(LinkList &L){//头结点L->next=NULL;int x;while (scanf("%d",&x)!=EOF){if (x==-1) break;Node *node = (Node *)malloc(sizeof(Node));node->data=x;node->next = L->next;L->next = node;}
}
  • 思考一下:若没有设置头结点,则上述代码需要修改哪些地方?
void headInsert2(LinkList &L){//无头结点L = NULL;int x;while (scanf("%d",&x)!=EOF){if (x==-1) break;Node *node = (Node *)malloc(sizeof(Node));node->data=x;node->next = L;L = node;}
}---
void swap(int &a,int &b){int temp =a;a = b;b = temp;
}
int main() {LinkList L;headInsert(L);int a=1,b=2;swap(a,b);printf("%d%d",a,b);return 0;
}
  1. 尾插法建立单链表

    (用尾指针构建)
    构建的顺序与输入相同

LinkList List_TailInsert(LinkList &L){LNode *s; ElemType x;L = (LinkList)malloc(sizeof(LNode));//创建头结点LNode *r = L;//添加尾指针rscanf("%d",&x);while (x!=-1){s = (LNode*)malloc(sizeof(LNode));s->data = x;r->next = s;r = s;scanf("%d",&x);}r->next = NULL;return L;
}
  • 循环链表

    1. 最后一个结点指针不是NULL,而改为指向头结点;
    2. 如何判断结束?
      是否等于头指针
  • 循环单链表

    (最后一个结点指向头指针)

LinkList List_HeadInsert(LinkList &L){LNode *s; ElemType x;L = (LinkList)malloc(sizeof(LNode));//创建头结点L->next = L;scanf("%d",&x);while (x!=-1){s = (LNode*)malloc(sizeof(LNode));s->data = x;s->next = L->next;L->next = s;scanf("%d",&x);}return L;
}

在循环单链表中,若对表尾表头操作,设置尾指针能提高效率

  • 双链表结构

typedef struct DNode {ElemType data;DNode *prioi, *next;
} DNode, *DLinkList;
  • 循环双链表

  • 静态数组

  • 王道线性表综合应用题(P37)

1.
void del_D(LinkList &L,ElemType x){LNode *p;if (L==NULL) return;if (L->data == x){p = L;L = L->next;free(p);del_D(L,x);} else{del_D(L->next,x);}
}
  • 注释:
 LNode *p = L->next; LNode *p = L;//修改指针p会直接改变L

3.void reverseLinkList(LinkList &L){LNode *p = L->next;LNode *p1;L->next = NULL;while (p!=NULL){p1 = p->next;//保存下一个节点,用于遍历链表p->next = L->next;L->next = p;p = p1;}
}

4.
void delMinNode(LinkList &L) {LNode *minP = L->next;//最小结点LNode *minPre = L;//最小结点的前驱LNode *prior;LNode *p = minP;while (p != NULL) {if (p->data < minP->data) {minP = p;minPre = prior;}prior = p;p = p->next;}minPre->next = minPre->next->next;//删除最小结点
}

(二)栈、队列和特殊矩阵

  • 顺序栈

//顺序栈结构
typedef struct {ElemType data[MaxSize];int top;
}SqStack;//初始化
void initStack(SqStack &s){s.top = -1;
}//进栈
bool push(SqStack &s,ElemType x){if (s.top==MaxSize-1) return false;s.data[++s.top] = x;return true;
}//出栈
bool pop(SqStack &s,ElemType &x){if (s.top==-1)return false;x = s.data[s.top--];return true;
}//栈顶
bool getTop(SqStack &s,ElemType &x){if (s.top==-1)return false;x = s.data[s.top];return true;
}
  • 共享栈

  • 链式栈

//栈的链式结构
typedef struct LinkNode{ElemType data;LinkNode *next;
}*LiStack;
  • 链式栈基本操作的实现

  • 队列顺序存储

//队列顺序存储
typedef struct {ElemType data[MaxSize];int front, rear;//队头指针,队尾指针
}SqQueue;


尾指针rear指向最后一个元素的下一个位置

  • 循环队列
//循环队列操作
//初始化
void initQueue(SqQueue &q){q.rear=q.front=0;
}
//判断空
bool isEmpty(SqQueue q){if (q.rear == q.front) return true;return false;
}
//入队
bool push(SqQueue &q,ElemType x){if ((q.rear+1)%MaxSize == q.front) return false;q.data[q.rear] = x;q.rear = (q.rear+1)%MaxSize;return true;
}
//出队
bool pop(SqQueue &q,ElemType &x){if (q.rear == q.front) return false;x = q.data[q.front];q.front = (q.front+1)%MaxSize;return true;
}

  • 队列的链式存储


    front充当头结点,rear充当尾指针

//链队列
typedef struct LinkNode {ElemType data;LinkNode *next;
} LinkNode;typedef struct {LinkNode *front, *rear;
} LinkQueue;//初始化
void initQueue(LinkQueue &q) {q.front = q.rear = (LinkNode *) malloc(sizeof(LinkNode));q.front->next = NULL;
}//判断为空
bool isEmpty(LinkQueue q) {if (q.front == q.rear) return true;return false;
}//入队
void push(LinkQueue &q, ElemType x) {LinkNode *s = (LinkNode *) malloc(sizeof(LinkNode));s->data = x;s->next = NULL;q.rear->next = s;q.rear = s;
}//出队
bool pop(LinkQueue &q, ElemType &x) {if (q.front==q.rear) return false;LinkNode *p = q.front->next;x = p->data;q.front->next = p->next;if (q.rear==p)//(若队列只有一个结点,删除后变空)q.rear = q.front;free(p);return true;
}

  • 双端队列

    同时具备栈和队列的数据结构

  1. 输入受限的双端队列
  2. 输出受限的双端队列
  • 栈和队列的应用

    ◦ 四则运算表达式 github
    ◦ 栈的应用:括号匹配,递归,进制转换,迷宫求解

    ◦ 队列在层次遍历中的应用,页面替换算法


特殊矩阵

  • 二维矩阵压缩

  • 对称矩阵

    (无需记住公式,自己推)


  • 三角矩阵

  • 三对角矩阵


  • 稀疏矩阵

    • struct表示法
typedef struct JZ{int i;//行号int j;//列号int val;//值
}juz;
  • 十字链表法

(三)树

  • 树的概念及特征

  1. 树是n个结点的有限集(n>=0);
  2. 树是一种递归的数据结构
  3. n个结点的树中有n-1条边
  • 树的基本术语

1.度:结点的度:结点的孩子个数树的度:树中孩子最多的那个结点的度
度大于0的结点叫分支结点;
度等于0的结点叫叶子结点2.结点的高度和层次结点的层次:即结点在第几层结点的高度/深度:树的高度/深度:树中结点的最大层数
  • 树的性质

  • 问:度数为m的树与m叉树的区别?

  • 二叉树的概念及特征

  1. 概念:每个结点的度最多为2,且左右子树的次序不能颠倒
  • 二叉树与度为2的有序树的区别
1.度为2的树至少有三个结点,而二叉树可以为空
2.二叉树的次序是确定的
  • 特殊的二叉树

  1. 满二叉树

一棵高度为h,且含有2^h-1个结点的二叉树称为满二叉树

2. 完全二叉树

3. 二叉排序树
左子树上所有结点的关键字均小于根节点的关键字;
右子树上所有结点的关键字均大于根节点的关键字;
左子树和右子树又是一棵二叉排序树。
4. 平衡二叉树
树上任意一结点的左子树和右子树的深度之差不超过1

  • 二叉树的性质




  • 二叉树的存储结构

  • 顺序存储结构


    完全二叉树和满二叉树采用顺序存储比较适合
    对于普通的二叉树,按图里的方法则公式无法适用
    需要将普通二叉树的结点编号按完全二叉树重新排列

  • 链式存储结构

typedef struct BiTNode{ElemType data;struct BiTNode *lChild,*rChild;
}BiTNode,*BiTree;
  • 线索二叉树

    线索二叉树

  • 树和森林

    树和森林

  • 二叉排序树、平衡二叉树和哈夫曼树

    二叉排序树、平衡二叉树和哈夫曼树


(四)图

  • 图的存储结构

    图的存储结构

  • 图的基本操作

    图的基本操作

  • 图的广度和深度搜索

    图的广度和深度搜索

  • 最小生成树与最短路径

    最小生成树与最短路径

  • DAG图与拓扑排序

    DAG图与拓扑排序

数据结构考纲笔记概览相关推荐

  1. python数据分析实训大纲,数据分析大赛考纲:(二)Python数据分析应会部分

    1.1. Numpy库的使用 1.1.1. Numpy数组的创建 1. 了解Numpy中ndarray数组对象的性质和特点: 1. 掌握通过array()函数创建Numpy数组的方法,会将Python ...

  2. sql语言管理中计算机系统,00051管理系统中计算机应用第四章数据库系统考纲

    第四章数据库系统考纲 一.数据库系统概述 识记: 1.数据模型:对现实世界事物特征的模拟和抽象就是这个事物的模型.在数据库中数据模 型是抽象的表示和处理现实世界中数据的工具. 首先按人们的认识观点将现 ...

  3. 计算机等级考试二级vb大纲,2009年全国计算机等级考试二级VB大纲考纲

    2009年全国计算机等级考试二级VB大纲考纲 [日期:2009-12-17] 来源: 作者: [字体:大 中 小] ◆ 基本要求 1. 熟悉Visual Basic集成开发环境. 2. 了解Visua ...

  4. 计算机考研代码854,哈工大计算机考研考纲854计算机基础

    哈工大计算机考研考纲 2016年硕士研究生入学考试大纲 考试科目名称:计算机基础 考试科目代码:[854] 本考试科目考试时间180分钟,满分150分.包括数据结构与计算机组成原理两部分,每部分各75 ...

  5. PAT甲级考纲(最少的时间换尽可能多的分数)

    下面的考纲从最重要的.考试概率最大的开始讲起,用最少的时间得最多的分数.祝大家考一个好成绩! 图论算法★★★★★ 图论算法几乎每年都有,99%会考,剩下1%是出卷老师啊想晃你一下. 搜索算法DFS/B ...

  6. 数据结构期末复习笔记(NEU版)

    数据结构期末复习笔记 绪论 数据结构的概念 数据结构的分类 数据结构研究的内容 算法的重要特性 算法的设计要求 题目汇总 线性表 栈和队列 栈 队列 题目 数组与广义表 树 二叉树 二叉树的遍历 线索 ...

  7. ap计算机科学a考纲,AP计算机考试考点分析_备考规划指导_5分容错率介绍

    离五月的日子越近,就越想要打醒一月报名时信心膨胀的自己.随着AP考试在国内的普及率越来越高,越来越多的出国党也开始不仅把眼光放在托福和SAT的考试上,而是挑战更高的难度的AP.今天,笔者将为大家带来A ...

  8. Follow Me:CCIE RS--新版CCIE Routing Switching 考纲要点

    新版CCIE Routing & Switching 考纲要点: Switching     * Catalyst Switch 3550 configuration     * Config ...

  9. 数据结构与算法笔记 - 绪论

    数据结构与算法笔记 - 绪论 1. 什么是计算 2. 评判DSA优劣的参照(直尺) 3. 度量DSA性能的尺度(刻度) 4. DSA的性能度量的方法 5. DSA性能的设计及其优化 x1. 理论模型与 ...

最新文章

  1. linux启动服务器ftp监听,Linux redhat6.5开启ftp服务
  2. java word 纸张大小_如何在Java中为Word文档(.doc或.docx)设置背景色(页面颜色)?...
  3. 【html 及 HTML5所有标签汇总】★★★
  4. linux变量转义,关于linux:在Bash变量中转义awk参数
  5. opengl层次建模_层次建模简介
  6. 如何在Linux上使用netstat命令查证DDOS***
  7. 七夕-探探小卡片鸿蒙版
  8. PyTorch报错“/.../Loss.cu: ... [59,0,0] Assertion input_val >= zero input_val <= one failed.”
  9. Go语言:生成随机数
  10. 网速提高学习周——软件篇
  11. html5的项目报告项目背景,项目可行性研究报告范本
  12. 关于OpenGL游戏全屏模式的设置
  13. 多旋翼无人机构成及其原理详解
  14. ftp文件服务器存储空间,查看ftp服务器存储空间
  15. 树莓派 Pico Pi USB串口通信
  16. c#中value是什么意思
  17. web应用集成WPS
  18. 经典《飞机大战》游戏,难道你不想自己动手开发一个嘛(附源码免费下载)
  19. LaTex 自动生成IEEE格式的参考文献
  20. twrp显示 failed to mount system

热门文章

  1. 【urllib的使用(上)】
  2. pushd, poped
  3. CVE-2010-2729(MS10-061)
  4. 计算机文化基础008,2013 中国成人教育 翻转课堂在高校计算机文化基础课中的应用研究_刘桂花...
  5. vue访问public路径
  6. 【前端知识之CSS】CSS3新增特性
  7. 2017.9.16队内互测——老年组Day1
  8. 论文笔记--Quality Prediction of Asymmetrically Distorted Stereoscopic 3D Images
  9. 关于AI+医疗的调研
  10. linux 两个文件比较是否完全相同