导航菜单
首页 >  408考研知识点总结  > 【408精华知识】史上最全的数据结构代码题总结!三万字长文!!!

【408精华知识】史上最全的数据结构代码题总结!三万字长文!!!

在这里插入图片描述

关于数据结构代码题,可以说是让很多同学感到头疼了,书上的代码太繁琐、网上的总结不全面让大家对代码题感到云里雾里,那么这篇文章可能会给大家带来一点启发,因为我自己也是深受代码题的折磨,所以一直想写一篇有关它的总结,希望能够做到全面、简洁,让大家用最快的速度记住代码书写思路、解答出题目、拿到更高的分数。 下面我将先对写代码所需要的基础知识进行总结,然后从两方面展开对代码题的分解,一方面是数据结构定义,另一方面是算法书写,最后通过历年真题验证我们的代码书写思路。

文章目录前言 基础知识(一)把代码题解决需要几步(二)需要知道的C语言表达1.定义变量2.定义函数3.动态分配语句一、数据结构定义(一)线性表(List)1.顺序表(SqList/SeqList)1)静态分配方式(SqList)2)动态分配方式(SeqList) 2.链表(LinkList/DLinkList/CLinkList/SLinkList)1)单链表(LinkList)2)双链表(DLinkList)3)循环链表(CLinkList)4)静态链表(SLinkList) (二)栈和队列(Stack、Queue)1.栈(Stack)1)顺序栈(SqStack)2)链栈(LinkStack) 2.队列(Queue)1)顺序队(SqQueue)2)链队(LinkQueue) (三)串1)顺序串(SString)2)堆分配串(HString)3)链串(String) (四)树和二叉树(Tree、BiTree)1.树(Tree)1)孩子表示法(CTree)2)双亲表示法(PTree)3)孩子兄弟表示法(CSTree) 2.二叉树(BiTree)1)顺序二叉树(SqBiTree)2)链式二叉树(LinkBiTree)3)线索二叉树(ThreadBiTree) (五)图(Graph)1)邻接矩阵法(MGraph)2)邻接表法(ALGraph)3)邻接多重表法(AMLGraph)4)十字链表法(OLGraph)二、算法书写(一)顺序表类1.遍历2.逆置法3.指针法 (二)链表类1.遍历2.逆置法3.指针法 (三)树类1.链树2.顺序树3.层序遍历 (四)图类1.深度优先遍历2.广度优先遍历 (五)查找类1.折半查找(二分查找) (六)排序类1.快速排序2.计数排序3.归并后语 历年真题(未完... ...)(一)2009(二)2010(三)2011(四)2012(五)2013(六)2014(七)2015(八)2016(九)2017(十)2018(十一)2019(十二)2020(十三)2021(十四)2022(十五)2023(十六)2024

前言 基础知识

代码作为一种和计算机交流的语言,要遵守程序语言世界的规范,接下来我们全部采用C语言书写代码。

(一)把代码题解决需要几步

完成一个代码题共有两步:

写出相应的数据结构:如果说写代码题是建房子,那么相应的数据结构就是建房子用的砖瓦,例如顺序表、链表、树、图等;写出算法代码:利用定义的数据结构,可以根据题目中给出的任务写出相应的C语言代码。 (二)需要知道的C语言表达 1.定义变量

规范表达:

DataType 变量名 = 赋值内容

DataType可以是常见数据类型int、string等,也可以是结构体比如LNode,还可以是指针LNode*、LinkList,变量名可以是单个数据,也可以是数组。 ············································································································································ 关于数组的定义,可以这样表达:

DataType 变量名[Maxsize]

············································································································································ 如果要定义常量,使用如下语句:

#define 常量名 值

············································································································································ 关于LNode*、LinkList这两者的区别如下:

lnode* p的含义:p是一个指针,它指向lnode类型的变量,它是一个lnode型变量的地址;linklist l的含义:l是一个指针,它指向表头lnode类型的变量,它是表头lnode类型变量的地址。

可以说LNode * == LinkList ············································································································································ 关于指针的表达,我总结出这样一句话来概括:

指针指向对象:LNode * p,出现其中一个时就是它本身,出现其中两个时缺谁就代表谁,出现三个时表示指针

p是指针,*代表指向,LNode是对象,所以说是指针指向对象;

出现其中一个就是它本身,比如单写一个p,就是指针p,单写一个LNode,就是结点;

出现两个时,比如写*p,就是指缺的那个LNode,也即代表指向的结点;

再如写LNode *,就是指缺的那个p,也即代表指向结点的指针;

三个都出现时,比如LNode * p,就代表p指针本身。 ············································································································································

再说一下指针的赋值,简单来说就是令两指针的指向相同:

lnode *s=L 表示:s指针指向L指针指向的内容,也即s与L同指向,而不是s指向L,s不是指针的指针。

其他数据类型的赋值是 “值 = 值”,而指针的赋值是 “地址 = 地址”,也即令两指针的指向相同。 ············································································································································ 我们有时能看到这样的两种表达:p.a和p->a,它们直接有什么区别呢?先来看一个例子:

typedef struct // 定义一个结构体类型:DATA { char key[10];// 结构体成员:key char name[20]; // 结构体成员:name int age;// 结构体成员:age }DATA;DATA data; //

相关推荐: