数据结构(C语言)
Frank Kong
这个作者很懒,什么都没留下…
展开
-
(三)双向链表的初始化、插入和删除
双向链表是在单链表的基础上增加了指向直接前驱的指针,所以在双向链表中的每一个节点都能很容易的找到他的前驱和后继。双向链表经常和循环链表一起使用,成为双向循环链表,他的尾指针的后继指向头结点,头结点的前驱指向尾节点,构成一个环的结果,这样,就算在尾节点也能很容易的找到头结点。此处以双向链表为例结构定义typedef int ElemType;typedef struct DulNod原创 2017-09-23 18:26:07 · 5700 阅读 · 0 评论 -
leetcode——删除链表的倒数第N个节点
这道题属于学完数据结构的进阶题,考研的时候经常会见到,现在leetcode见到了它描述:给定一个链表,删除链表的倒数第n个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n保证是有效的。思路:快慢两...原创 2019-10-03 19:30:11 · 168 阅读 · 0 评论 -
Median of Two Sorted Arrays(两个顺序数组求中位数)
Example 1:nums1 = [1, 3]nums2 = [2]The median is 2.0Example 2:nums1 = [1, 2]nums2 = [3, 4]The median is (2 + 3)/2 = 2.5有两种方法:1、在合并的时候就排好序,再求中位值2、先合并,然后进行排序,最后求中位值第原创 2018-01-10 20:44:01 · 369 阅读 · 0 评论 -
(十一)线索二叉树的创建和遍历(中序)
线索二叉树详见严蔚敏《数据结构》结构定义typedef char TElemType;//Link==0:指针;Thread==1:线索typedef enum PointerTag{Link=0,Thread};typedef struct BiThrNode{ TElemType data; struct BiThrNode *lchild,*rchild;//左原创 2017-10-11 20:25:35 · 493 阅读 · 0 评论 -
(十)先序序列建立和遍历二叉树
先序遍历二叉树的操作定义是:若二叉树为空,则操作为空,否则:1、访问根节点 。2、先序遍历左子树。3、先序遍历右子树。例如,下图所示二叉树的遍历结果是:ABDECF严蔚敏的《数据结构》中多采用伪代码,算法6-4中若直接运行会创建无效,没法输出创建的二叉树。需要将创建的结点赋值给该树。结构定义:typedef char TElemType;typedef stru原创 2017-10-09 19:01:47 · 630 阅读 · 0 评论 -
(二)静态链表
静态链表的思想是数组代替指针,数组的元素都是由两个数据域组成,data和cur。数组的每一个下标都对应一个data和一个cur。cur相当于单链表的next指针,存放该元素的后继在数组中的下标。静态链表不一定用得着,或者很少用到,了解一下即可。存储定义#define MAXSIZE 1000typedef int ElemType;typedef struct { Elem原创 2017-09-20 20:38:08 · 331 阅读 · 0 评论 -
(一)顺序表和单链表的初始化、插入、删除等操作
线性表定义#define MAXSIZE 20 //线性表最长长度typedef int ElemType; //数据类型typedef struct{ ElemType data[MAXSIZE]; int length;}SqList;函数说明/** * 顺序表 * InitList(*L) 初始化 * ListEmpty(L) 若为空,返回tru原创 2017-09-18 17:18:28 · 3717 阅读 · 0 评论 -
(九)树的双亲孩子表示法
把每个结点的孩子结点排列起来,存储结构为链表方式,n个头指针组成一个线性表,采用顺序村塾结构,存放进一个一维数组。这样就容易找到某个结点的所有孩子结点和双亲结点。typedef int TElemType;//树的双亲孩子表示法结构定义#define MAX_TREE_SIZE 100//孩子结点typedef struct CTNode { int child; st原创 2017-09-27 13:17:12 · 674 阅读 · 0 评论 -
(八)串的简单操作(输出串后面出现乱码问题解决)
堆分配存储结构的串由顺序存储结构的特点,处理方便。存储结构:typedef struct{ char *ch; int length;}HString;函数//初始化void Str_Init(HString *S){ S->ch = NULL; S->length = 0;}//生成一个值等于串常量chars的串TStatus StrAss原创 2017-09-25 14:40:59 · 721 阅读 · 0 评论 -
(七)链式队列的初始化、入队列和出队列
链式队列需要有队头指针和队尾指针才能唯一确定一个队列,头指针一般指向头结点,尾指针指向最后一个元素结点。空的队列就是队头指针和队尾指针都指向了头结点。在可以确地长度最大值时采用循环队列,无法估计长度的时候用链式队列。结构定义typedef int QElemType;typedef struct QNode{ QElemType data; struct QNode *n原创 2017-09-25 09:31:28 · 6736 阅读 · 2 评论 -
(六)循环顺序队列的初始化、入队列、出队列
初学数据结构最好的办法可能是先读程杰写的《大话数据结构》,以下摘自豆瓣图书简介:《大话数据结构》以一个计算机教师教学为场景,讲解数据结构和相关算法的知识。通篇以一种趣味方式来叙述,大量引用了各种各样的生活知识来类比,并充分运用图形语言来体现抽象内容,对数据结构所涉及到的一些经典算法做到逐行分析、多算法比较。与市场上的同类数据结构图书相比,本书内容趣味易读,算法讲解细致深刻,是一本非常适合自学的读物原创 2017-09-24 19:58:43 · 3499 阅读 · 0 评论 -
(五)链式栈的初始化、入栈和出栈
链式栈是从栈顶开始,有一个next指针指向他的后继,一直到栈底,栈底的next为NULL。链式栈为空的时候top也为NULL,入栈的时候就有两种情况,第一种top为空的时候,入栈后该元素的next应该为NULL,另一种是存在top的时候,他的next应该为入栈前的栈顶元素。链式栈和链表一样,不用考虑空间问题,基本不存在栈满的情况。链式栈的结构:typedef int SElemType;原创 2017-09-24 11:44:24 · 5781 阅读 · 0 评论 -
(四)顺序栈的入栈和出栈
栈的基本思想是先进后出,如同弹夹的子弹压入和弹出,一般叫进栈和出栈。顺序栈的结构定义typedef int SElemType;typedef struct { SElemType data[MAXSIZE]; int top;}SqStack;初始化、入栈和出栈函数//初始化Status InitStack(SqStack *s){ s->top = -原创 2017-09-24 10:24:44 · 5386 阅读 · 0 评论 -
LeetCode——24. 两两交换链表中的节点
题目描述:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例:给定 1->2->3->4, 你应该返回 2->1->4->3.解题:这道题不算难,设置三个指针用于节点交换,然后考虑进去一些特殊情况,没有太大问题特殊情况主要有以下几种:链表只有一个节点或者为N...原创 2019-10-06 11:15:59 · 143 阅读 · 0 评论