
数据结构
文章平均质量分 59
H..b.
努力,奋斗!
展开
-
通讯录实现(其三)
在前两篇对通讯录以数组和动态数组的形式实现以后,还想要该项目进一步优化,可以将之前输入的联系人信息存下来,在下次需要打开时,直接读取之前的文件即可,不需要再次输入。 本次优化的点在于,文件的加载和存档: 文件加载:在初始化阶段完成。 文件存档:在退出程序时完成。(退出异常时可能导致存档失败) 因为大部分代码都是相同的,所以本篇博客并不将所有的代码附上,若有需要,可以点击下面的链接: 在此只将优...原创 2018-10-24 19:39:01 · 314 阅读 · 0 评论 -
常见的单链表面试题
1.从尾到头打印单链表 思路:采用递归的思路,当plist->next指向的节点为NULL时,递归停止,开始反向依次输出链表上的节点 void TailToHead(ListNode *plist) { if(plist == NULL) return; TailToHead(plist->next); printf("%d->",plist-&am原创 2019-08-25 15:12:39 · 739 阅读 · 0 评论 -
无头单向非循环链表的实现
简介 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域,由于不必按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表相应的时间复杂度分别是O(logn)和O(1)。 分...原创 2019-08-25 13:24:06 · 351 阅读 · 0 评论 -
程序猿必学之堆排序
2、堆排序 要想了解堆排序的过程,首先得知道什么是堆? 要想了解什么是堆,首先得知道什么是二叉树? 而在堆排序中使用的完全二叉树只是二叉树的一种,所以先得了解什么是完全二叉树? 完全二叉树(百度百科): 若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。 简单来说,就是一棵从上往下,从左往右的必须依次布...原创 2019-07-28 16:08:28 · 450 阅读 · 0 评论 -
动态顺序表的增删改查及相关操作
顺序表的概念及结构 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组 上完成数据的增删查改。 顺序表一般可以分为: 静态顺序表:使用定长数组存储。 动态顺序表:使用动态开辟的数组存储 // 顺序表的静态存储 #define N 100 typedef int DataType; typedef struct SeqLi...原创 2019-08-01 16:46:25 · 362 阅读 · 0 评论 -
排序
下图是对常见的几种排序的简单分类:原创 2018-12-31 21:22:52 · 236 阅读 · 0 评论 -
快速排序
快速排序的思路: 在一组数据中选择一个数作为基准值,记为pivot; 将数组中小于基准值的放在基准值的左边,大于基准值的放在基准值的右边; 对每个分割出来的区间递归处理。 示意图: 下面对以上三步各自做一定说明: 1.选择基准值: 1). 选择数组最左/右边的数; 2).选择数组的最左边的数和最右边的数以及最中间的数,在三个数中任意选择一个; 3).在数组中随机选择 2.数组分成小的区...原创 2018-11-27 22:32:28 · 411 阅读 · 0 评论 -
通讯录实现(其二)
在上一篇博客中,利用数组简单实现了通讯录的一些基本功能,有需要的可以点击下面的链接进行查看: https://blog.youkuaiyun.com/Hb_key/article/details/83213597 之前是直接创建了固定大小的数组,难免存在空间浪费和存储上限的问题,接下来对其进行一定的优化,将其改造为动态数组版。由于两者实现的主要功能都是一样的,而且在实现上并没有大的区别,所以本篇不再分析具体的...原创 2018-10-24 18:59:20 · 370 阅读 · 0 评论 -
通讯录实现(其一)
在C语言的学习过程中,接触到通讯录的简单实现,从简单的开始,先用数组实现此任务。 思路如下: 首先需要一个结构体PeoInfo来存储联系人的信息,之后需要将它定义为数组,方便存储更多的联系人。 定义整形变量size,记录联系人的数目。 为方便操作,封装以上两个变量,操作时,可能需要改变size的值(如果不封装,每次传参需要传两个),封装到一个新的结构体Contact中,Contact的成员分为:...原创 2018-10-20 15:13:57 · 398 阅读 · 0 评论 -
实现有头指针的双向循环链表
无头单向非循环链表的实现 常见的单链表面试题 DLinkList.h #pragma once #include<stdio.h> #include<stdlib.h> #include<assert.h> typedef int DLDataType; typedef struct ListNode { DLDataType data; struct L...原创 2019-08-25 15:24:14 · 474 阅读 · 0 评论