数据结构考纲笔记概览
(一)线性表
线性表定义
相同类型的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
可以通过->
访问成员;单链表建立
头插法建立单链表
构建的顺序与输入相反,如输入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;
}
尾插法建立单链表
(用尾指针构建)
构建的顺序与输入相同
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;
}
循环链表
- 最后一个结点指针不是NULL,而改为指向头结点;
- 如何判断结束?
是否等于头指针
循环单链表
(最后一个结点指向头指针)
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;
}
双端队列
同时具备栈和队列的数据结构
- 输入受限的双端队列
- 输出受限的双端队列
栈和队列的应用
◦ 四则运算表达式 github
◦ 栈的应用:括号匹配,递归,进制转换,迷宫求解◦ 队列在层次遍历中的应用,页面替换算法
特殊矩阵
二维矩阵压缩
对称矩阵
(无需记住公式,自己推)
三角矩阵
三对角矩阵
稀疏矩阵
- struct表示法
typedef struct JZ{int i;//行号int j;//列号int val;//值
}juz;
- 十字链表法
(三)树
树的概念及特征
- 树是n个结点的有限集(n>=0);
- 树是一种递归的数据结构
- n个结点的树中有n-1条边
树的基本术语
1.度:结点的度:结点的孩子个数树的度:树中孩子最多的那个结点的度
度大于0的结点叫分支结点;
度等于0的结点叫叶子结点2.结点的高度和层次结点的层次:即结点在第几层结点的高度/深度:树的高度/深度:树中结点的最大层数
树的性质
- 问:度数为m的树与m叉树的区别?
二叉树的概念及特征
- 概念:每个结点的度最多为2,且左右子树的次序不能颠倒
- 二叉树与度为2的有序树的区别
1.度为2的树至少有三个结点,而二叉树可以为空
2.二叉树的次序是确定的
特殊的二叉树
- 满二叉树
一棵高度为h,且含有2^h-1个结点的二叉树称为满二叉树
2. 完全二叉树
3. 二叉排序树
左子树上所有结点的关键字均小于根节点的关键字;
右子树上所有结点的关键字均大于根节点的关键字;
左子树和右子树又是一棵二叉排序树。
4. 平衡二叉树
树上任意一结点的左子树和右子树的深度之差不超过1
二叉树的性质
二叉树的存储结构
顺序存储结构
完全二叉树和满二叉树采用顺序存储比较适合
对于普通的二叉树,按图里的方法则公式无法适用
需要将普通二叉树的结点编号按完全二叉树重新排列
链式存储结构
typedef struct BiTNode{ElemType data;struct BiTNode *lChild,*rChild;
}BiTNode,*BiTree;
线索二叉树
线索二叉树
树和森林
树和森林
二叉排序树、平衡二叉树和哈夫曼树
二叉排序树、平衡二叉树和哈夫曼树
(四)图
图的存储结构
图的存储结构
图的基本操作
图的基本操作
图的广度和深度搜索
图的广度和深度搜索
最小生成树与最短路径
最小生成树与最短路径
DAG图与拓扑排序
DAG图与拓扑排序
数据结构考纲笔记概览相关推荐
- python数据分析实训大纲,数据分析大赛考纲:(二)Python数据分析应会部分
1.1. Numpy库的使用 1.1.1. Numpy数组的创建 1. 了解Numpy中ndarray数组对象的性质和特点: 1. 掌握通过array()函数创建Numpy数组的方法,会将Python ...
- sql语言管理中计算机系统,00051管理系统中计算机应用第四章数据库系统考纲
第四章数据库系统考纲 一.数据库系统概述 识记: 1.数据模型:对现实世界事物特征的模拟和抽象就是这个事物的模型.在数据库中数据模 型是抽象的表示和处理现实世界中数据的工具. 首先按人们的认识观点将现 ...
- 计算机等级考试二级vb大纲,2009年全国计算机等级考试二级VB大纲考纲
2009年全国计算机等级考试二级VB大纲考纲 [日期:2009-12-17] 来源: 作者: [字体:大 中 小] ◆ 基本要求 1. 熟悉Visual Basic集成开发环境. 2. 了解Visua ...
- 计算机考研代码854,哈工大计算机考研考纲854计算机基础
哈工大计算机考研考纲 2016年硕士研究生入学考试大纲 考试科目名称:计算机基础 考试科目代码:[854] 本考试科目考试时间180分钟,满分150分.包括数据结构与计算机组成原理两部分,每部分各75 ...
- PAT甲级考纲(最少的时间换尽可能多的分数)
下面的考纲从最重要的.考试概率最大的开始讲起,用最少的时间得最多的分数.祝大家考一个好成绩! 图论算法★★★★★ 图论算法几乎每年都有,99%会考,剩下1%是出卷老师啊想晃你一下. 搜索算法DFS/B ...
- 数据结构期末复习笔记(NEU版)
数据结构期末复习笔记 绪论 数据结构的概念 数据结构的分类 数据结构研究的内容 算法的重要特性 算法的设计要求 题目汇总 线性表 栈和队列 栈 队列 题目 数组与广义表 树 二叉树 二叉树的遍历 线索 ...
- ap计算机科学a考纲,AP计算机考试考点分析_备考规划指导_5分容错率介绍
离五月的日子越近,就越想要打醒一月报名时信心膨胀的自己.随着AP考试在国内的普及率越来越高,越来越多的出国党也开始不仅把眼光放在托福和SAT的考试上,而是挑战更高的难度的AP.今天,笔者将为大家带来A ...
- Follow Me:CCIE RS--新版CCIE Routing Switching 考纲要点
新版CCIE Routing & Switching 考纲要点: Switching * Catalyst Switch 3550 configuration * Config ...
- 数据结构与算法笔记 - 绪论
数据结构与算法笔记 - 绪论 1. 什么是计算 2. 评判DSA优劣的参照(直尺) 3. 度量DSA性能的尺度(刻度) 4. DSA的性能度量的方法 5. DSA性能的设计及其优化 x1. 理论模型与 ...
最新文章
- linux启动服务器ftp监听,Linux redhat6.5开启ftp服务
- java word 纸张大小_如何在Java中为Word文档(.doc或.docx)设置背景色(页面颜色)?...
- 【html 及 HTML5所有标签汇总】★★★
- linux变量转义,关于linux:在Bash变量中转义awk参数
- opengl层次建模_层次建模简介
- 如何在Linux上使用netstat命令查证DDOS***
- 七夕-探探小卡片鸿蒙版
- PyTorch报错“/.../Loss.cu: ... [59,0,0] Assertion input_val >= zero input_val <= one failed.”
- Go语言:生成随机数
- 网速提高学习周——软件篇
- html5的项目报告项目背景,项目可行性研究报告范本
- 关于OpenGL游戏全屏模式的设置
- 多旋翼无人机构成及其原理详解
- ftp文件服务器存储空间,查看ftp服务器存储空间
- 树莓派 Pico Pi USB串口通信
- c#中value是什么意思
- web应用集成WPS
- 经典《飞机大战》游戏,难道你不想自己动手开发一个嘛(附源码免费下载)
- LaTex 自动生成IEEE格式的参考文献
- twrp显示 failed to mount system
热门文章
- 【urllib的使用(上)】
- pushd, poped
- CVE-2010-2729(MS10-061)
- 计算机文化基础008,2013 中国成人教育 翻转课堂在高校计算机文化基础课中的应用研究_刘桂花...
- vue访问public路径
- 【前端知识之CSS】CSS3新增特性
- 2017.9.16队内互测——老年组Day1
- 论文笔记--Quality Prediction of Asymmetrically Distorted Stereoscopic 3D Images
- 关于AI+医疗的调研
- linux 两个文件比较是否完全相同