
数据结构
文章平均质量分 57
sophia__yu
想要获得,便得付出。
展开
-
链表带头结点和不带头结点带区别
链表作为一种基本数据结构,常用的链表分为带结点和不带头结点。从线性表的定义可以知道,线性表允许在任意位置进行插入和删除。所有的链表都有一个头指针head,带头结点的链表中head的数据项为空,而不带头的链表直接在头结点存入数据,那么当从头插入数据时,head需要时刻变化。接下来具体分析:1.带头结点的链表的插入,使用一个临时变量p等于插入之前的结点(不管具体插入位置),之后不论要插入的结点x是...原创 2018-11-18 15:19:25 · 17566 阅读 · 7 评论 -
二叉树基本操作
定义结构体:typedef int BTDatatype;typedef struct BinaryTreeNode{ struct BinaryTreeNode *left; struct BinaryTreeNode *right; BTDatatype data;}BTNode;前序构建二叉树的结点;前序遍历二叉树;中序遍历二叉树;后序遍历二叉树;求二叉树的结点,叶子节点,第K层...原创 2018-04-21 15:40:51 · 341 阅读 · 0 评论 -
栈和队列面试题
定义的结构体#include<stdio.h>#include<stdlib.h>#include<windows.h>typedef int Datatype;typedef struct stack{ Datatype *array; int top; int end; int capcity;//最大容量}stack;栈的基本操作:si...原创 2018-04-21 11:34:30 · 254 阅读 · 0 评论 -
逆波兰表达式和计算器
首先,介绍一下什么是逆波兰表达式:表达式逆波兰表达式,它的语法规定,表达式必须以逆波兰表达式的方式给出。逆波兰表达式又叫做后缀表达式。这个知识点在数据结构和编译原理这两门课程中都有介绍,下面是一些例子:正常的表达式 逆波兰表达式a+b ---> a,b,+a+(b-c) ---> a,b,c,-,+a+(b-c)*d ---> a,b,c,-,d,*,+a+d*(b-c)---&...原创 2018-04-07 14:50:17 · 4635 阅读 · 0 评论 -
实现一个栈,要求实现一个push,pop,min(返回最小值)的时间复杂度为0(1)
对于这个题,入栈和出栈时间复杂度本来就为0(1),所以现在主要问题是将返回最小值也为0(1)。可以定义一个栈,栈里面一个元素是结构体,而结构体里存的是入栈数据,和最小值。看下图:代码如下:头文件及声明:Stack.hmain函数:初始化:入栈:将最小值出栈:...原创 2018-04-01 21:40:38 · 484 阅读 · 0 评论 -
链表面试题
经常会在面试时出现链表的题,本篇博客是对经典面试题一个总结。首先:整个程序的头文件Slist.h:新增结点:尾插:打印链表:FindSlist函数:从尾到头打印单链表:递归从头到尾打印单链表:递归是将问题化为子问题,若链表为:1 2 3 4 5 ,打印1 2 3 4,就先打印5,打印1 2 3 ,就先打印出4.......代码如下:...原创 2018-03-26 19:05:24 · 211 阅读 · 0 评论 -
带头双向循环链表
带头双向循环链表:带有头结点,是双向的,是循环的,即尾指向头,头也指向尾。带头双向循环链表图如下:下面是双向循环链表的一些实现:首先:头文件Dlist.h如下:源文件Dlist.c如下:main函数:test1函数:test2函数:初始化函数:销毁函数:新增结点:打印链表:尾插:注:DlistInsert函数下面会有。前插:任意位置插入:DlsitFind函数:前删:尾删:任意位置删除:结果:...原创 2018-03-25 22:57:50 · 522 阅读 · 0 评论